JAXWS – 如何更改端点地址

我如何dynamic更改我的JAXWS客户端使用的地址? 这个客户端是由wsimport生成的。

你可以使用BindingProvider接口来实现。

JAX-WS自定义端点

/** * The following snippets shows how to set a custom endpoint for a JAX-WS generated WebClient on runtime */ // Get the service and the port SampleService service = new SampleService(); Sample port = service.getESamplePort(); // Use the BindingProvider's context to set the endpoint BindingProvider bp = (BindingProvider)port; bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://www.aviramsegal.com/ws/sample"); /* Optional credentials */ bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "user"); bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "password"); port.callSampleMethod(); 

用Apache CXF解决了这个问题。

只用两行代码! 这里是片段:

 URL url_wsdl = new URL("http://myserver/myservice?wsdl"); Service service = Service.create(url_wsdl, new QName("http://myaddress...", "ServiceName")); return service.getPort(MyJAXWSPortClass.class); 

如果您使用wsimport,我不确定如何做到这一点。 我有同样的问题,所以我使用Intellij IDEA(版本9)为我创build客户端代码。 它提供了一个接受wsdl url的服务端点构造函数。

我是新来的PayPal集成,我不确定自适应付款API。 但是我们有权检查在PayPal中是否使用GetVerifiedStatus方法的特定电子邮件ID。

请使用下面的沙箱wsdl URLvalidation电子邮件

url: https : //svcs.sandbox.paypal.com/AdaptiveAccounts ?wsdl

回应如下

 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header/> <soapenv:Body> <ns2:GetVerifiedStatusResponse xmlns:ns2="http://svcs.paypal.com/types/aa"> <responseEnvelope> <timestamp>2015-07-20T23:42:46.661-07:00</timestamp> <ack>Success</ack> <correlationId>5cea9a8575ab9</correlationId> <build>17345626</build> </responseEnvelope> <accountStatus>UNVERIFIED</accountStatus> <countryCode>IN</countryCode> <userInfo> <emailAddress>anandg.saga@gmail.com</emailAddress> <accountType>PERSONAL</accountType> <accountId>6KD7EVWM2E2AQW</accountId> <name> <salutation/> <firstName>anand</firstName> <middleName/> <lastName>anand</lastName> <suffix/> </name> <businessName/> </userInfo> </ns2:GetVerifiedStatusResponse> </soapenv:Body> </soapenv:Envelope> 

注意:创build存根时不要忘记设置如下的端点。 如果我们不设置这个,我们不能得到预期的输出。

 String endpointURL = "https://svcs.sandbox.paypal.com/AdaptiveAccounts/GetVerifiedStatus"; 

使用下面的方法添加端点

 private static void addEndPoint(AdaptiveAccountsPortType port, String endpointURL) { BindingProvider bp = (BindingProvider)port; bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL); /*List hchain = bp.getBinding().getHandlerChain(); if (hchain == null) { hchain = new ArrayList(); } hchain.add(new HTTPUserAgentHandler()); bp.getBinding().setHandlerChain(hchain);*/ }