Как изменить адрес, используемый веб-службой CXF, на другой, отличный от адреса, указанного в файле wsdl?
-
07-07-2019 - |
Вопрос
У меня это работает, когда я получаю 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>
Решение
Можете ли вы использовать ClientProxyFactoryBean ? Вам даже не нужен WSDL, если у вас есть скомпилированные заглушки. Например:
ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:9000/Hello");
HelloWorld client = (HelloWorld) factory.create();
Другие советы
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();
JaxWS вместо Client перед Factory Beanfactory работал для нас.
Не связан с StackOverflow