2010-06-10 16 views
25

Ahora estoy usando Apache CXF como cliente de servicios web para un servicio .NET para evitar la autenticación NTLM. Funciona muy bien, pero me pregunto por qué parece que no puedo establecer el punto final objetivo del servicio web. CXF parece querer el WSDL en tiempo de ejecución por alguna extraña razón, no estoy seguro. Toma el punto final físico del WSDL, que funciona bien en los entornos de prueba, supongo, pero en el momento del despliegue seguro que cambiará.Cliente Apache CXF para puntos finales dinámicos

Aquí hay algo de código para demostrar:

 MyWebServices service = new MyWebServices(); 
     MyWebServicesSoap port = service.getMyWebServicesSoap12(); 

     // Turn off chunking so that NTLM can occur 
     Client client = ClientProxy.getClient(port); 
     HTTPConduit http = (HTTPConduit) client.getConduit(); 
     HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy(); 
     httpClientPolicy.setConnectionTimeout(36000); 
     httpClientPolicy.setAllowChunking(false); 
     http.setClient(httpClientPolicy); 

     port.doSomethingUseful(); 

Una vez más, no hay lugar que puedo ver en la API del cliente CXF que me permite establecer el punto final del servicio. No es que yo pueda ver de todos modos. En este caso, el objetivo es http://localhost/integration/webservices/mywebservices.asmx, pero podría estar en cualquier parte. Sin duda, este problema peatonal se resuelve de alguna manera?

Respuesta

44

Pruebe lo siguiente:

MyWebServicesSoap port = service.getMyWebServicesSoap12(); 
BindingProvider provider = (BindingProvider) port; 
provider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpoint); 

Alternativamente, MyWebServices podría tener otros métodos getXXX que tienen una dirección URL para la ubicación WSDL

+0

no está seguro de lo se refiere a su última declaración aquí – andyczerwonka

+0

En la clase MyServices, ¿hay otros métodos que devolverán un puerto que acepte un parámetro de URL? ¿Puedes editar tu publicación para pegar la firma de esa clase? – Kevin

+0

funciona como un amuleto - gracias – andyczerwonka

10

Trabajando en cxf 2.6.1

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

Esto no funcionó para mí en CXF 2.7.12. –

Cuestiones relacionadas