如何更改Web服务URL端点?

我使用JBoss实用程序(JAX-WS兼容)使用Eclipse的Web服务客户端从wsdl生成了一个Web服务客户端。

所以,我唯一提供的是一个到Web服务WSDL的URL。

现在,Web服务提供者告诉我要更改Web服务的“客户端端点应用程序访问的URL”。

这是什么以及如何改变它?

国际海事组织,提供者告诉你改变服务端点(即到达Web服务),而不是客户端端点(我不明白这可能是什么)。 要更改服务端点,基本上有两个选项。

使用绑定提供程序来设置端点URL

第一个选项是更改BindingProvider.ENDPOINT_ADDRESS_PROPERTY属性值(每个代理实现javax.xml.ws.BindingProvider接口):

 ... EchoService service = new EchoService(); Echo port = service.getEchoPort(); /* Set NEW Endpoint Location */ String endpointURL = "http://NEW_ENDPOINT_URL"; BindingProvider bp = (BindingProvider)port; bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL); System.out.println("Server said: " + echo.echo(args[0])); ... 

缺点是这只有在原始的WSDL仍然可以访问的情况下才有效。 不build议。

使用WSDL获取端点URL

第二个选项是从WSDL获取端点URL。

 ... URL newEndpoint = new URL("NEW_ENDPOINT_URL"); QName qname = new QName("http://ws.mycompany.tld","EchoService"); EchoService service = new EchoService(newEndpoint, qname); Echo port = service.getEchoPort(); System.out.println("Server said: " + echo.echo(args[0])); ... 

要在这里添加一些说明,当您创build服务时,服务类使用默认的“wsdlLocation”,当从wsdl构build类时,它将被插入到其中。 所以如果你有一个名为SomeService的服务类,并且你创build了一个这样的实例:

 SomeService someService = new SomeService(); 

如果你看看SomeService,你会看到构造函数如下所示:

 public SomeService() { super(__getWsdlLocation(), SOMESERVICE_QNAME); } 

所以,如果你想要指向另一个URL,你只需要使用一个URL参数的构造函数(有6个构造函数来设置qname和特性)。 例如,如果您已经设置了一个在端口9999上侦听的本地TCP / IP监视器,并且您想要redirect到该URL:

 URL newWsdlLocation = "http://theServerName:9999/somePath" SomeService someService = new SomeService(newWsdlLocation); 

这将在服务中调用这个构造函数:

 public SomeService(URL wsdlLocation) { super(wsdlLocation, SOMESERVICE_QNAME); } 

要更改结束地址属性,请编辑您的wsdl文件

 <wsdl:definitions....... <wsdl:service name="serviceMethodName"> <wsdl:port binding="tns:serviceMethodNameSoapBinding" name="serviceMethodName"> <soap:address location="http://service_end_point_adress"/> </wsdl:port> </wsdl:service> </wsdl:definitions>