gpt4 book ai didi

java - JAX-WS::从独立的 Java 7 SE 客户端调用 Web 服务的方法

转载 作者:搜寻专家 更新时间:2023-10-31 20:12:29 24 4
gpt4 key购买 nike

我正在试验独立的 JAX-WS Web 服务、服务器端和客户端(意思是,不在 Java EE 容器内运行)。显示独立服务器端的一个很好的 SO 帖子是 this one .

对于客户端,我发现了以下三种似乎有效的方法(在使用 wsimport 生成客户端 stub 之后):

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"));
}
}

我不知道任何其他客户端访问模式或上面显示的方式如何相互比较。

还有其他应注意的方法或权衡吗?

最佳答案

最后,经过一些实验,我认为下面显示的方式(取自 here )与我问题中的前三种方式相比具有明显的优势:

{   // 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"));
}

优点是:

  • WSDL 不会在运行时检索(为什么要检索?它已在代码创建时用于创建客户端 stub )
  • 服务的 URL 在 stub 中进行硬编码。

关于java - JAX-WS::从独立的 Java 7 SE 客户端调用 Web 服务的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18925888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com