Comment changer l'adresse utilisée par un service Web CXF par une adresse différente de celle spécifiée dans le fichier wsdl?

StackOverflow https://stackoverflow.com/questions/1421873

  •  07-07-2019
  •  | 
  •  

Question

Je le fais fonctionner lorsque le wsdl est basé sur la configuration, mais je voudrais simplement lui dire d'utiliser une adresse spécifique pour l'appel de service et d'utiliser une copie locale du wsdl.

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

Quelqu'un connaît-il les meilleures pratiques pour cela?

requête XML qui fonctionne.

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

Une requête proxy xml qui ne fonctionne pas.

<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>
Était-ce utile?

La solution

Pouvez-vous utiliser le ClientProxyFactoryBean ? Vous n'avez même pas besoin du WSDL si vous avez les stubs compilés. Par exemple:

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

Autres conseils

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 au lieu de Client devant Factory Beanfactory a fonctionné pour nous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top