Set Endpoint Address in JAX-WS Client
Example:
| 1 | try{ |
| 2 | HelloServiceservice=newHelloService( |
| 3 | newURL("http://new/endpointaddress?wsdl"), |
| 4 | newQName("http://example.org/hello","HelloService")); |
| 5 | }catch(MalformedURLExceptione){ |
| 6 | log.fatal(e); |
| 7 | } |
| 8 | |
| 9 | HelloPortproxy=service.getHelloPort(); |
| 10 | proxy.sayHello("HelloWorld!"); |
| 11 |
You can use BindingProvider.ENDPOINT_ADDRESS_PROPERTY to override endpoint address. One caveat is the original endpoint used to generated the client proxy need to be up, otherwise you'll get a nasty "java.net.ConnectException: Connection refused" exception when instantiating the Service at the first place.
| 1 | //CreateserviceandproxyfromthegeneratedServiceclass. |
| 2 | HelloServiceservice=newHelloService(); |
| 3 | HelloPortproxy=service.getHelloPort(); |
| 4 | |
| 5 | Map<String,Object>ctxt=((BindingProvider)proxy).getRequestContext(); |
| 6 | ctxt.put(JAXWSProperties.HTTP_CLIENT_STREAMING_CHUNK_SIZE,8192); |
| 7 | ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,"http://new/endpointaddress"); |
| 8 | |
| 9 | proxy.sayHello("HelloWorld!"); |
| 10 |
Use a local wsdl placed in classpath to create service and port, then set new end point address. This solves the issue that the original wsdl can NOT be be obtained from a live server and the live wsdl has a different service name, for example as a result of service virtualization.
| 1 | HelloServiceservice=newHelloService( |
| 2 | this.getClass().getResource("originalHello.wsdl"), |
| 3 | newQName("http://example.org/hello","HelloService")); |
| 4 | |
| 5 | Map<String,Object>ctxt=((BindingProvider)proxy).getRequestContext(); |
| 6 | ctxt.put(JAXWSProperties.HTTP_CLIENT_STREAMING_CHUNK_SIZE,8192); |
| 7 | ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,"http://new/endpointaddress"); |
| 8 | |
| 9 | proxy.sayHello("HelloWorld!"); |
| 10 |
Declaration:
This doc is a copy from http://jianmingli.com/wp/?p=585
JAX-WS客户端设置端点地址
本文介绍如何在JAX-WS客户端中通过多种方式设置新的端点地址,包括直接在构造Service实例时指定新地址、使用BindingProvider.ENDPOINT_ADDRESS_PROPERTY属性覆盖原有地址,以及从本地文件加载WSDL来解决原始WSDL不可用的问题。
1427

被折叠的 条评论
为什么被折叠?



