Eug*_*neP 98 java jboss web-services jax-ws
我使用来自wsdl'的Eclipse'Web服务客户端,使用JBoss utils(JAX-WS兼容)生成了一个Web服务客户端.
所以,我提供的唯一内容是Web服务WSDL的URL.
现在,Web服务提供商告诉我更改Web服务的"客户端端点应用程序访问的URL".
它是什么以及如何改变它?
Pas*_*ent 165
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]));
...
Run Code Online (Sandbox Code Playgroud)
缺点是这仅在原始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]));
...
Run Code Online (Sandbox Code Playgroud)
Mat*_*ttC 16
为了在这里添加一些说明,当您创建服务时,服务类使用默认的'wsdlLocation',当从wsdl构建类时,它会插入到它中.因此,如果您有一个名为SomeService的服务类,并且您创建了这样的实例:
SomeService someService = new SomeService();
Run Code Online (Sandbox Code Playgroud)
如果您查看SomeService,您将看到构造函数如下所示:
public SomeService() {
super(__getWsdlLocation(), SOMESERVICE_QNAME);
}
Run Code Online (Sandbox Code Playgroud)
因此,如果您希望它指向另一个URL,您只需使用带有URL参数的构造函数(还有6个构造函数用于设置qname和功能).例如,如果您已设置正在侦听端口9999的本地TCP/IP监视器,并且您想要重定向到该URL:
URL newWsdlLocation = new URL("http://theServerName:9999/somePath");
SomeService someService = new SomeService(newWsdlLocation);
Run Code Online (Sandbox Code Playgroud)
这将在服务中调用此构造函数:
public SomeService(URL wsdlLocation) {
super(wsdlLocation, SOMESERVICE_QNAME);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
186591 次 |
最近记录: |