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




