AXIS ile Stub olusturarak Web servis kullanımı
tc kimlik, webservice, webservis, axis, java June 12th, 2007
![]()
AXIS ile Stub oluşturarak Web servis kullanımı
Artık devletin ya da diğer kuruluşların servislerine uygulamalarımızda rahatça, hem de değişik yollarla erişebiliyoruz. Web servislerinin kullanımı vaadedildiği kadar kolay olmasa da şu andaki neredeyse tüm teknolojiler tarafından şöyle ya da böyle desteklenmekte. Bu açık büfemizde Türkiye’nin e-dönüşümünde kilometretaşı olan Mernis’in altprojesi olan KPS(Kimlik Paylaşım Sistemi)’ni kullanan bir web servis istemcisi yapacağız. KPS temelde iki islem yapmamiza olanak sagliyor. Birincisi Kimlik numarasindan kisinin bilgilerine ya da kisinin bilgilerinden kimlik numarasina ulasim saglanabiliyor. Bunun disinda tum illerin listesi, tum ilcelerin listesi ya da bir ile bagli ilcelerin listesi alinabilecegi yardimci servisler de mevcut. Biz bu servislerden kisi bilgilerinden kimlik numarasina ulasma servisini kullanacagiz. Fakat urettigimiz stub siniflari sayesinde diger islemleri de yapabiliyor olacagiz.
Stub nedir?
Stub sanki islemi yerel makinada yapiyormus gibi metodlari olan ama arkaplanda islemleri uzak makinaya yaptirip sonucunu bize donduren siniftir. Yani bir nevi muamelecidir.
WSDL nedir?
Web servislerini tanimlayan dokumanlara WSDL denir. Bunlar web servisinin bize sundugu metodlari bunlarin arguman aldigi ve geri dondurdugu veri yapilarini tanimlar. Bunlarin sayesinde onceden bilmedigimiz servislerin dokumanina bakarak ne gibi islemler yaptirabilecegimizi dinamik olarak bulabiliriz.
Apache AXIS nedir?
Kendi deyimi ile bir SOAP uygulama çatısıdır. AXIS ile web servis istemcileri ve sunuculari yaratilabilir. Tomcat gibi servlet motorlarina eklenebilir. Bizim tarifimizde kullanacagimiz bolum WSDL’den Java siniflari ureten kismi olacak.
Malzemeler:
* http://tckimlik.nvi.gov.tr/kpsPublic.asmx?WSDL adresinde bulunan KPS web servis tanimlama dokumani
* Apache AXIS
Yapilisi:
Once Apache AXIS’in sitesine gidin. http://ws.apache.org/axis/releases.html adresinde versiyonlari bulabilirsiniz. Her zaman son versiyon tercih edilmelidir(Su anda 1.2.1). Turkiye’deki sunucularindan birini secin. Dosyanin kaynak kodu dagitimi degil derlenmis olmasina dikkat edin. Indirilen dosyayi bir dizine guzelce acin. Komut satirinda acilan dizin icindeki lib icine gectikten sonra su komutu calistirin:
> java -cp axis.jar;commons-logging.jar;commons-discovery.jar;jaxrpc.jar; saaj.jar;wsdl4j.jar;mail.jar;activation.jar org.apache.axis.wsdl.WSDL2Java -o C:\prj\TCKimlik\src -a -v -p tr.gov.nvi.mernisws http://tckimlik.nvi.gov.tr/kpsPublic.asmx?WSDL
WSDL sinifi bize WSDL’den java siniflarinin uretimini saglayan programi icerir. Projenin kaynak dizinine bakildiginda siniflarin uretilmis oldugu gorulur. Istersek baska projelerde kullanilmak uzere olusturdugumuz siniflari derleyip bir kutuphane haline de getirebiliriz.
> javac -cp axis.jar;commons-logging.jar;commons-discovery.jar;jaxrpc.jar; saaj.jar;wsdl4j.jar;mail.jar;activation.jar -d C:\prj\TCKimlik\classes C:\prj\TCKimlik\src\tr\gov\nvi\mernisws\*
> jar -cf C:\prj\TCKimlik\mernisws.jar -C C:\prj\TCKimlik\classes tr
Bu islem olurken diger taraftan ornek kodumuzu yazalim. Normalde ilk sorgulayacagimiz kimlik kodu kendi kimlik numaramiz olacaktir.
Soyle bir deneme programı yazalim:
package org.manyaklari.java;
import tr.gov.nvi.mernisws.*;
/**
* JavaDoc yazmayi asla unutmam, heyo heyo.
*/
public class TCKimlik {
/**
* Uygulamanın giriş noktası. KPS web servisini kullanarak
* TC kimlik nosunu döndürür.
* @param a uygulama parametreleri, kullanılmıyor.
*/
public static void main(String[] a) {
KPSPublicWebServiceLocator loc = new KPSPublicWebServiceLocator();
KPSPublicWebServiceSoap_PortType service;
KimlikBilgisi out_kb;
try {
service = loc.getKPSPublicWebServiceSoap();
TemelBilgilerdenKimlikBilgisi in_kb = new TemelBilgilerdenKimlikBilgisi();
in_kb.setAd(”ALİ”);
in_kb.setSoyad(”YILMAZ”);
in_kb.setAnaAd(”AYŞE”);
in_kb.setBabaAd(”MEHMET”);
in_kb.setCinsiyet(CinsiyetTipi.Erkek);
in_kb.setDogumYil(1979);
in_kb.setIlceKod(1322);
out_kb = service.kisiBilgisindenKimlikBilgisiSorgula(in_kb);
System.out.println(out_kb.getTCKimlikNo());
} catch (javax.xml.rpc.ServiceException e) {
System.out.println(e);
} catch (java.rmi.RemoteException e) {
System.out.println(e);
}
}
}
Once servisi bulan sinif olan ServiceLocator sinifini yaratip kisiBilgisindenKimlikBilgisiSorgula metodunu kullanarak kimlik bilgilerimizi arguman olarak veriyoruz. Cikti olan kimlik bilgisi sinifindan da kimlik numaramizi aliyoruz.
Burada dikkatimizi ceken konu ilce kodunun gerekliligi. Bunu iki sekilde yapabiliriz. Birincisi benim yaptigim gibi http://tckimlik.nvi.gov.tr/Web/QueryIdentityNumber.aspx adresine giderek sorgu sirasinda kendi ilcenizin numarasini HTML kodundan ogrenmek ya da yukaridaki kodda kucuk bir degisiklik yaparak buldurmak.
ArrayOfIlceBilgisi ilceler = service.ileBagliIlceListesiGetir(26);
IlceBilgisi[] ilcearr = ilceler.getIlceBilgisi();
for (int i = 0; i < ilcearr.length; i++) {
System.out.println(ilcearr[i].getKod() + ” ” + ilcearr[i].getAd());
}
Yaptigimiz programi calistiralim:
> java -cp axis.jar;commons-logging.jar;commons-discovery.jar;jaxrpc.jar; saaj.jar;wsdl4j.jar;mail.jar;activation.jar;C:\prj\TCKimlik\classes org.manyaklari.java.TCKimlik
Hepimize afiyet olsun.
Social Bookmarking
July 12th, 2008 at 9:37
Başarılı bir makale olmuş, gerçek bir uygulama üzerinden örnek verilmesi konuyu daha anlaşılabilir hale getirmiş.