Genel

JAX-WS Tutorial – 2

Jax-ws ile ilgili derslerimize hoşgeldiniz.

Dersle ilgili detayları merak ediyorsanız, aşağıdaki videodan konuyu takip edebilirsiniz.

JSR 181

JAX-WS ile JSR 181 ile kullanılması kararlaştırılan anotasyonlar kullanılıyor. Bu anotasyonlardan bazıları
@WebService, @WebMethod, @WebParam vs. Anotasyonlar javax.jws paketinde mevcut.

javax.jws.WebService ve serviceName

Eğer bir web servisine aşağıdaki gibi isim verilirse
@WebService(name = “myService”)
üretilen wsdl dosyasında aşağıdaki gibi bir XML üretiliyor

<service name=”myService”>
<port name=”myServicePort” binding=”tns:myServicePortBinding”>
<soap:address location=”//localhost:8080/myApp/webservice”/>
</port>
</service>

Burada kullanılan servis ismine ?wsdl eklenip sorgulama yapılırsa XML çıktısı görülebilir.

Bazen wsdl dosyasında wsdl: şeklinde kullanım da görülebilir. O zaman XML aşağıdaki gibi olacaktı.

<wsdl:service name=”myService”>
<wsdl:port name=”myServicePort” binding=”tns:myServicePortBinding”>
<soap:address location=”//localhost:8080/myApp/webservice”/>
</wsdl:port>
</wsdl:service>

javax.jws.WebMethod

Eğer bir metodun dışarıya açılmasını istemiyorsak aşağıdaki gibi yapıyoruz.

@WebMethod(exclude = true)

javax.jws.OneWay

Eğer bir metodun geriye döneceği bir cevap yoksa onu OneWay olarak işaretlersek WSDL dosyasında port’a bağlı olan output tagleri üretilmez. Örnek:

@WebMethod
@OneWay
public void myCall ()…

javax.jws.soap.SOAPBinding

@WebService
@SOAPBinding(style = Style.DOCUMENT)
public interface HelloWorld{
}

JAX-WS document/literal tarzı çalıştığı için başka bir örnek te belki doğru olmazdı zaten.

JAX-WS RI ve WS-Addressing
WS-Addressing’in açıklayan gördüğüm en iyi yazı What is WS-Addressing. Bu standart ile mesajın kimliği ve get/post aksiyonlarından hangisinin yapılmak istendiği Http protokolü yerine SOAP mesajının içine konuluyor.

JAX-WS RI ve WS-ReliableMessaging
Desteklemiyor

WSDL ve XSD
WSDL (Web Services Description Language) web servislerinin sunduğu arayüzlerin tanımlanabilmesi için kullanılan XML tabanlı tanımlama dilidir.

Yazılan servisin wsdl ve xsd dosyalarını görmek için
//localhost:8080/MyApp/webservice?wsdl ve //localhost:8080/MyApp/webservice?xsd=1 adreslerine bağlanmak yeterli.

wsimport kullanmadan dynamic proxy yöntemi ile client yaratmak
Aşağıdakine benzer bir kod ile dynamic proxy yaratarak herhangi bir webservisini kullanmak mümkün.

URL url = null;
try {
url = new URL(“//localhost:8080/MyApp/webservice?wsdl”);
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
QName qname = new QName(“//webservice.mycompany.com.tr/”, “SorgulaWsService”);

Service service = Service.create(url, qname);

ISorgulaWs sorgulaws = service.getPort(ISorgulaWs.class);
sorgulaws.getUcret();

Burada dikkat edilmesi gereken husus JAXWS client erroring out when calling a stateless session bean exposed as a webservice sorusunda da açıklandığı gibi WebServisimizin bir interface kullanarak yazılması.

Bir başka örnek ise aşağıda.

QName serviceName = new QName(Namespace.SERVICE, “FileService”);
service = new FileService(new URL(“//localhost:8059/WS/FileService?wsdl”), serviceName);
file_service = service.getSOAP11();

Bu yöntemin dezavantajı her çağrı için karşıdan wsdl dosyasının istenmesi. How to cache JAX-WS stub/port in Java? sorusuna verilen cevapta bir çözüm sunulmuş.

wsimport
WSDL dosyasından java sınıfları üretmek için wsimport komutunu kullanmak lazım. wsimport komutu JDK ile geliyor ve bin dizininde kurulu. Örnek:

wsimport.exe //localhost:8080/MyApp/webservice?wsdl

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir