Java 如何将CXF Web服务使用的地址更改为与wsdl文件中指定的地址不同的地址?

Java 如何将CXF Web服务使用的地址更改为与wsdl文件中指定的地址不同的地址?,java,web-services,cxf,Java,Web Services,Cxf,当我基于配置获取wsdl时,它就可以工作了,但我只想告诉它使用服务调用的特定地址,并使用wsdl的本地副本 MyWebService serviceDefinition = new MyWebService(new URL(wsdlLocation)); service = serviceDefinition.getMyWebServicePort(); 有人知道这方面的最佳实践吗 有效的xml请求 <soap:Body> <ns2:getData xmlns:ns2="ht

当我基于配置获取wsdl时,它就可以工作了,但我只想告诉它使用服务调用的特定地址,并使用wsdl的本地副本

MyWebService serviceDefinition = new MyWebService(new URL(wsdlLocation));
service = serviceDefinition.getMyWebServicePort();
有人知道这方面的最佳实践吗

有效的xml请求

<soap:Body>
<ns2:getData xmlns:ns2="http://services.test.com/">
<arg0>Test Name</arg0>
<arg1>55555555</arg1>
</ns2:getData>
</soap:Body>

测试名称
55555555
无法工作的代理xml请求

<soap:Body>
<ns1:getData xmlns:ns1="http://ws.test.com/">
<ns3:arg0 xmlns:ns2="http://services.test.com/" xmlns:ns3="http://ws.test.com/">Test Name</ns3:arg0>
<ns3:arg1 xmlns:ns2="http://services.test.com/" xmlns:ns3="http://ws.test.com/">55555555</ns3:arg1>
</ns1:getData>
</soap:Body>

测试名称
55555555
你能用这个吗?如果您有已编译的存根,您甚至不需要WSDL。例如:

ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:9000/Hello");
HelloWorld client = (HelloWorld) factory.create();

JaxWS而不是ClientFactoryBeanfactory的前面为我们工作。

这是因为它进行web服务调用,但它传递的参数不能被远程web服务读取。当它到达服务器端的我的方法时,这些值为null。正在发送参数(检查请求中发送的xml)。它在使用远程wsdl时100%工作,不确定为什么不工作。使用此方法和远程wsdl方法时xml之间有什么区别?我用每个请求web服务的方法发送的xml更新了我的问题。谢谢你的帮助,我真的很感激!您可能需要ClientProxyFactoryBean的JAX-WS子类:JaxWsProxyFactoryBean。基本的ClientProxyFactoryBean不知道jaxws注释以及本例中可能需要的注释。我也使用ws-security,所以我不确定这是否会使问题复杂化。。。
MyWebService serviceDefinition = new MyWebService(new URL(wsdlLocation));
service = serviceDefinition.getMyWebServicePort();

((BindingProvider)service).getRequestContext()
    .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:8080/foobar");
JaxWsProxyFactoryBeanfactory = new JaxWsProxyFactoryBean();

factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:9000/Hello");
HelloWorld client = (HelloWorld) factory.create();