我使用JBoss utils生成了一个Web服务客户端(兼容JAX-WS) 使用来自wsdl'的Eclipse'Web服务客户端。
因此,我提供的唯一内容是Web服务WSDL的URL。
现在,Web服务提供商告诉我更改Web服务的“客户端端点应用程序访问的URL”。
它是什么以及如何改变它?
答案 0 :(得分:156)
IMO,提供商告诉您更改服务端点(即到达Web服务的位置),而不是客户端端点(我不明白这可能是什么)。要更改服务端点,您基本上有两个选项。
第一个选项是更改BindingProvider.ENDPOINT_ADDRESS_PROPERTY
(每个代理实现BindingProvider
接口)的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仍可访问时才有效。不推荐。
第二个选项是从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]));
...
答案 1 :(得分:15)
为了在这里添加一些说明,当您创建服务时,服务类使用默认的'wsdlLocation',当从wsdl构建类时,它会插入到它中。因此,如果您有一个名为SomeService的服务类,并且您创建了这样的实例:
SomeService someService = new SomeService();
如果查看SomeService,您会看到构造函数如下所示:
public SomeService() {
super(__getWsdlLocation(), SOMESERVICE_QNAME);
}
因此,如果您希望它指向另一个URL,您只需使用带有URL参数的构造函数(还有6个构造函数用于设置qname和功能)。例如,如果您已设置正在侦听端口9999的本地TCP / IP监视器,并且您想要重定向到该URL:
URL newWsdlLocation = "http://theServerName:9999/somePath"
SomeService someService = new SomeService(newWsdlLocation);
,这将在服务中调用此构造函数:
public SomeService(URL wsdlLocation) {
super(wsdlLocation, SOMESERVICE_QNAME);
}
答案 2 :(得分:0)
我不会说@Femi来更改现有的address属性。您可以轻松地将新服务添加到“定义”部分。
<wsdl:service name="serviceMethodName_2">
<wsdl:port binding="tns:serviceMethodNameSoapBinding" name="serviceMethodName">
<soap:address location="http://new_end_point_adress"/>
</wsdl:port>
</wsdl:service>
这不需要将WSDL重新编译为Java,并且进行更新并不比使用BindingProvider选项困难(顺便说一句对我来说不起作用)。
答案 3 :(得分:-4)
要更改结束地址属性,请编辑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>