[英]JAX-WS :: ways to call a web service from a standalone Java 7 SE client
我正在嘗試獨立的JAX-WS Web服務,服務器和客戶端(意思是,不在Java EE容器內運行)。 顯示獨立服務器端的好SO帖子就是這個 。
對於客戶端,我發現了以下三種似乎有效的方法(使用wsimport
生成客戶端存根):
public static void main(String[] args) throws Exception {
String serviceURL = "http://localhost:9000/soap?wsdl";
{ // WAY 1
URL url = new URL(serviceURL);
QName qname = new QName("urn:playground:jax-ws", "MyService");
Service service = Service.create(url, qname);
IHello port = service.getPort(IHello.class);
System.out.println(port.sayHello("Long John"));
}
{ // WAY 2
MyService service = new MyService();
IHello port = service.getHelloPort();
((javax.xml.ws.BindingProvider) port).getRequestContext().put(javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY, serviceURL);
System.out.println(port.sayHello("Long John"));
}
{ // WAY 3
URL url = new URL(serviceURL);
QName qname = new QName("urn:playground:jax-ws", "MyService");
MyService service = new MyService(url, qname);
IHello port = service.getHelloPort();
System.out.println(port.sayHello("Long John"));
}
}
我不知道客戶端訪問的任何其他模式或上面顯示的方式如何相互比較。
應該注意的任何其他方法或權衡取舍?
最后,經過一些實驗,我認為下面顯示的方式(從這里開始 )與我之前的三個問題相比具有明顯的優勢:
{ // WAY 4
QName qname = new QName("urn:playground:jax-ws", "MyService");
MyService service = new MyService(null, qname);
IHello port = service.getHelloPort();
BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, serviceURL);
System.out.println(port.sayHello("John Silver"));
}
優點是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.