如何更改Web服务URL端点?

时间:2010-03-22 08:15:30

标签: java web-services jboss jax-ws

我使用JBoss utils生成了一个Web服务客户端(兼容JAX-WS) 使用来自wsdl'的Eclipse'Web服务客户端。

因此,我提供的唯一内容是Web服务WSDL的URL。

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

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

4 个答案:

答案 0 :(得分:156)

IMO,提供商告诉您更改服务端点(即到达Web服务的位置),而不是客户端端点(我不明白这可能是什么)。要更改服务端点,您基本上有两个选项。

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

第一个选项是更改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

第二个选项是从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>