我正在尝试独立的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"));
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道客户端访问的任何其他模式或上面显示的方式如何相互比较.
应该注意的任何其他方法或权衡取舍?
最后,经过一些实验,我认为与我的问题中的前三种方式相比,下面所示的方式(取自此处)具有明显的优势:
{ // 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"));
}
Run Code Online (Sandbox Code Playgroud)
优点是:
归档时间: |
|
查看次数: |
14615 次 |
最近记录: |