有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

当我基于配置获取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>

无法工作的代理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>

共 (3) 个答案

  1. # 1 楼答案

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

    JaxWS而不是客户端FactoryBeanfactory为我们工作

  2. # 2 楼答案

    MyWebService serviceDefinition = new MyWebService(new URL(wsdlLocation));
    service = serviceDefinition.getMyWebServicePort();
    
    ((BindingProvider)service).getRequestContext()
        .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:8080/foobar");
    
  3. # 3 楼答案

    你能用ClientProxyFactoryBean吗?如果您有已编译的存根,您甚至不需要WSDL。例如:

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