Android | KSOAP2 ile SOAP Tabanlı Web Servise Erişim

Begüm Yazıcı 👩🏻‍💻
3 min readSep 28, 2017

Web servis kullanımı, android ve diğer mobil platformlarda yazılan uygulamaların uzaktaki(back-end) bir veritabanına(Sql Server,Oracle gibi) erişmesi gerektiğinde gündeme gelmesi gereken bir konudur.

Web Servis Nedir?

Farklı platformların arasındaki iletişimi standardize edilmiş bir takım protokollere ve veri formatlarına göre yapabilmeyi sağlayan yazılımlardır.Web servislerin kendilerinin hangi dil ve teknolojiyle geliştirilmiş olduğu önemsizdir, zira HTTP,SOAP,JSON gibi evrensel standartları destekleyecek şekilde geliştirilirler. Web servis geliştirmek için günümüzde iki farklı metadoloji kullanılmaktadır. Bunlardan birisi RESTful diğeri ise SOAP metadolojisidir.

SOAP Nedir?

İstemci ve servis arasında taşınan ve terminolojide mesaj şeklinde anılan verilerin yapısını standardize eden bir protokoldür. Bu protokol veri formatı olarak XML’i kullanır. (Xml Json yapısına göre daha büyüktür.)

Envelope: Tüm SOAP mesajlarının olduğu elemandır. SOAP mesajına ilişkin XML belgesinin root elemanı olmak zorundadır. Envelope elemanı içinde her zaman bir Body elemanı vardır fakat Header elemanı olmak zorunda değildir. Soap mimarisine göre eğer envelope elemanı içinde Header elemanı varsa bu eleman Envelope elemanının içindeki ilk eleman olmalıdır. Soap kullanan mimarilerde kesinlikle erişim protokolü olarak TCP kullanılmalıdır.

Body: Eğer mesaj bir talep mesajı ise çağrılan servis fonksiyonuna ait parametre değerlerini içerir. Şayet mesajı bir cevap mesajı ise bu kez body kısmı fonksiyonun geri dönüş değerinin serialize edilerek yerleştirildiği kısım olacaktır.

Header: Özelleştirilebilen bir kısım olup genellikle kimlik belirleme amaçlı verilerin serialize edilerek yerleştirildiği opsiyonel bir kısımdır.

Fault: Zorunlu olmayan yani opsiyonel olan bir kısım olup fonksiyonda oluşan hatayı içerir.

SOAP Kullanımı

Öncelikle örnek projemizde Soap tabanlı ws ye erişimizi aşağıdaki linkten sağlıyoruz.

Linke tıkladığımızda request ve response bulunan bir xml verimiz olduğunu kolaylıkla görebiliyoruz. Projemizde ilk olarak tasarım kısmını yapıyoruz.

Bir adet edittext alanımız var ve kullanıcı butona bastığında web servise erişim sağlanarak edittext alanına girilen veriyi alarak butonun altında bulunan textview alanında gösterilecek. Yapılacak işlem kısaca bu şekildedir. Ekran tasarımını yaptıktan sonra; Manifest dosyamıza gelerek internet izni tanımlıyoruz.

MainActivity.java dosyamıza gelerek aşağıdaki tanımlamaları yapıyoruz.

NAMESPACE olarak tanımladığımız kısım, aslında Soap mesajımızdaki SOAPAction alanının …xml/ olan kısmıdır. (Sondaki ‘/’ işareti unutulmamalıdır.)

URL alanı Soap mesaja ulaştığımız sayfanın Url alanının ‘?’ alanına kadar olan kısmıdır. (Sitenin url: https://www.w3schools.com/xml/tempconvert.asmx?op=CelsiusToFahrenheit)

MainActivity.java sınıfımızda AsyncTask sınıfından türetilerek yeni bir sınıf oluşturuyoruz. (4 fonksiyonu override ediyoruz. Override ettiğimiz fonksiyonların içini dolduruyoruz. Burada projenin içeriğine göre kodlar şekillenir. Ancak temel olarak yapmamız gereken bazı kısımlar vardır.)Temel olarak yapmamız gereken kısımları aşağıdaki görselde yorum satırı şeklinde belirttim.

Öncelikle SoapObject nesnemizin görünür olması için Ksoap2 kütüphanesini projemize import etmemiz gerekmektedir. Bunun için de ilgili kütüphaneyi indirdikten sonra Project -> app ->lib dizinine gelip ‘Show in explorer’ diyerek bulunduğu dizine ulaşıyoruz ve kütüphanemizi buraya ekliyoruz. Daha sonra build.gradle ‘a gelip dependencies kısmına ‘compile files (‘libs/jar_path’) satırını ekliyoruz. Sync Project with Gradle düğmesine tıklanarak işlem bitirilmelidir.

Projenin kaynak kodlarına burdan ulaşabilirsiniz.

Umarım herkes için faydalı bir yazı olmuştur.

--

--