如何使用动态端点创建CXF Web服务客户端?

时间:2011-09-16 16:01:11

标签: java web-services soap cxf endpoint

我们有一个描述Web服务的中央WSDL文件。我们使用CXF生成客户端代码,但此代码似乎绑定到1个端点。如何创建使用WSDL的CXF客户端,但我可以在哪里指定端点?是否有办法将端点更改为实现相同WSD的URL:?

4 个答案:

答案 0 :(得分:9)

如果other服务实现了相同的WSDL,那么在创建MyClientService对象时,可以将URL传递给新服务的WSDL权限,然后将它传递给构造函数。大多数服务都会将其wsdl暴露在?wsdl上,因此使用它可能“正常工作”。

或者,您可以通过以下方式覆盖端点URL:

((BindingProvider)proxy).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_URL, "http://my.service.url.com/...")

其中proxyMyClientService对象。

答案 1 :(得分:4)

使用cxf 2.6.1

Client client = ClientProxy.getClient(port);
client.getRequestContext().put(Message.ENDPOINT_ADDRESS, "http://some-valid-endpoint") ;

答案 2 :(得分:1)

您可以使用 JaxWsProxyFactoryBean 动态调用服务

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

factory.setServiceClass(ChangeStudentDetails.class);
factory.setAddress("http://localhost:8081/CXFTutorial/ChangeStudent");

答案 3 :(得分:1)

  

javax.xml.ws.WebServiceException:无法找到Web方法XXXX的wsdl:binding操作信息。
      在org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:125)
      在com.sun.proxy。$ Proxy82.getUser(未知来源)

如果发生此错误,请将注释Webservice添加到已在服务端开发的客户端界面。

我遇到了这个问题,我已经使用CXF配置了Spring。我已经开发了该服务并从客户端调用它。

希望这会有所帮助。