2011-09-16 22 views
5

Tenemos un archivo WSDL central que describe un servicio web. Usamos CXF para generar código de cliente, pero este código parece estar vinculado a 1 punto final. ¿Cómo puedo crear un cliente CXF que use WSDL, pero donde puedo especificar el punto final? ¿Hay alguna manera de cambiar el punto final a una URL que implementa el mismo WSD :?¿Cómo crear un cliente de servicio web CXF con punto final dinámico?

Respuesta

9

Si el servicio other implementa el mismo WSDL, cuando crea el objeto MyClientService, puede pasar la URL al WSDL del nuevo servicio directamente al constructor y lo hará. La mayoría de los servicios exponen su wsdl en? Wsdl, por lo que su uso puede "simplemente funcionar".

Alternativamente, puede anular la URL de punto final a través de:

((BindingProvider)proxy).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_URL, "http://my.service.url.com/...") 

donde proxy es el objeto MyClientService.

+0

La implementación del "otro" servicio efectivamente implementa el mismo wsdl. Revisé el código generado y tengo un objeto de fábrica que me da un objeto. No veo forma de cómo especificar el url sofar ... ¿alguna pista sobre eso? – Marco

1

puede utilizar JaxWsProxyFactoryBean para llamar dinámicamente un servicio

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 

factory.setServiceClass(ChangeStudentDetails.class); 
factory.setAddress("http://localhost:8081/CXFTutorial/ChangeStudent"); 
+1

¿no olvidó llamar 'factory.create()'? – Zarathustra

4

Trabajando en cxf 2.6.1

Client client = ClientProxy.getClient(port); 
client.getRequestContext().put(Message.ENDPOINT_ADDRESS, "http://some-valid-endpoint") ; 
0

javax.xml.ws.WebServiceException: No se pudo encontrar WSDL: información de operación vinculante para el método web XXXX.
en org.apache.cxf.jaxws.JaxWsClientProxy.invoke (JaxWsClientProxy.java:125)
en com.sun.proxy. $ Proxy82.getUser (origen desconocido)

Si este error se produjo a continuación, añadir Servicio web de anotación a su interfaz del lado del cliente que ya está desarrollado en el lado del servicio.

Me he enfrentado a este problema, he configurado Spring con CXF. Ya he desarrollado el servicio y llamándolo desde el cliente.

Espero que esto ayude.

Cuestiones relacionadas