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

ScA*_*er2 3 java web-services cxf

当我根据配置获得wsdl时,我已经开始工作了,但是我想告诉它使用特定地址进行服务调用并使用wsdl的本地副本.

MyWebService serviceDefinition = new MyWebService(new URL(wsdlLocation));
service = serviceDefinition.getMyWebServicePort();
Run Code Online (Sandbox Code Playgroud)

有谁知道这方面的最佳做法?

xml请求有效.

<soap:Body>
<ns2:getData xmlns:ns2="http://services.test.com/">
<arg0>Test Name</arg0>
<arg1>55555555</arg1>
</ns2:getData>
</soap:Body>
Run Code Online (Sandbox Code Playgroud)

代理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>
Run Code Online (Sandbox Code Playgroud)

Kev*_*vin 9

你可以使用ClientProxyFactoryBean吗?如果您有已编译的存根,则甚至不需要WSDL.例如:

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

  • 您可能需要ClientProxyFactoryBean的JAX-WS子类:JaxWsProxyFactoryBean.基本的ClientProxyFactoryBean不知道jaxws注释,在这种情况下可能需要这样做. (9认同)

小智 5

MyWebService serviceDefinition = new MyWebService(new URL(wsdlLocation));
service = serviceDefinition.getMyWebServicePort();

((BindingProvider)service).getRequestContext()
    .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:8080/foobar");
Run Code Online (Sandbox Code Playgroud)