java - online - Cliente Apache CXF para puntos finales dinámicos
wsdl to java online (2)
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 tomen una URL para la ubicación de WSDL
Ahora estoy usando Apache CXF como un 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á.
Aquí hay un 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();
De nuevo, no hay ningún lugar que pueda ver en la API del cliente CXF que me permita 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?
Trabajando en cxf 2.6.1
Client client = ClientProxy.getClient(port);
client.getRequestContext().put(Message.ENDPOINT_ADDRESS, "http://some-valid-endpoint") ;