如何更改 Web 服务 url 终结点?
2022-08-31 09:36:54
我使用JBoss utils(JAX-WS兼容)使用Eclipse'web service client from a wsdl'生成了一个Web服务客户端。
因此,我提供的唯一内容是指向 Web 服务 WSDL 的 url。
现在,Web 服务提供商告诉我更改 Web 服务的“客户端终结点应用程序访问的 url”。
它是什么,如何改变它?
我使用JBoss utils(JAX-WS兼容)使用Eclipse'web service client from a wsdl'生成了一个Web服务客户端。
因此,我提供的唯一内容是指向 Web 服务 WSDL 的 url。
现在,Web 服务提供商告诉我更改 Web 服务的“客户端终结点应用程序访问的 url”。
它是什么,如何改变它?
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]));
...
为了在此处添加一些说明,在创建服务时,服务类使用默认的“wsdlLocation”,该类是在从 wsdl 构建类时插入到其中的。因此,如果您有一个名为SomeService的服务类,并且您创建了一个如下所示的实例:
SomeService someService = new SomeService();
如果你查看 SomeService 内部,你会看到构造函数看起来像这样:
public SomeService() {
super(__getWsdlLocation(), SOMESERVICE_QNAME);
}
因此,如果您希望它指向另一个URL,则只需使用采用URL参数的构造函数(还有6个构造函数用于设置qname和功能)。例如,如果您设置了在端口 9999 上侦听的本地 TCP/IP 监视器,并且想要重定向到该 URL:
URL newWsdlLocation = new URL("http://theServerName:9999/somePath");
SomeService someService = new SomeService(newWsdlLocation);
这将在服务内部调用此构造函数:
public SomeService(URL wsdlLocation) {
super(wsdlLocation, SOMESERVICE_QNAME);
}