【发布时间】:2011-10-17 09:22:27
【问题描述】:
我正在使用带有 jax-ws 的 Metro 创建一个 Web 服务客户端,并且我想覆盖端点地址。
使用 2.11.1 中的以下示例。 BindingProvider.ENDPOINT_ADDRESS_PROPERTY 我可以这样做: http://metro.java.net/guide/How_to_invoke_and_endpoint_by_overriding_endpoint_address_in_the_WSDL.html
//Create service and proxy from the generated Service class.
HelloService service = new HelloService();
HelloPort proxy = service.getHelloPort();
((BindingProvider)proxy).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"http://new/endpointaddress");
proxy.sayHello("Hello World!");
但我不明白为什么我不能使用 service.getHelloPort().sayHello("Hello World!") 而不是 proxy.sayHello("Hello World! ") 如示例所示。如果我这样做了,Web 服务客户端将使用它的默认端点地址,而不是我想要使用的那个。
看起来我每次调用 getHelloPort()
时都会得到一个新的 HelloPort 实例谁能解释一下?
【问题讨论】:
-
你的代码是什么?你如何覆盖端点地址?
-
更新了代码示例。我在别处也得到了一些指示。 System.out.println(service.getHelloPort() == service.getHelloPort()) 打印出错误,所以看起来我真的为每个 getHelloPort() 调用获取了一个新实例