Клиент Apache CXF для динамических конечных точек
Теперь я использую Apache CXF в качестве клиента веб-служб для службы .NET, чтобы обойти проверку подлинности NTLM. Он отлично работает, но мне интересно, почему я не могу установить целевую конечную точку веб-службы. Похоже, что CXF хочет WSDL во время выполнения по какой-то странной причине - не уверен. Он берет физическую конечную точку из WSDL, которая отлично работает в тестовых средах, я думаю, но во время развертывания она обязательно изменится.
Вот какой код для демонстрации:
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();
Опять же, в API-интерфейсе CXF я не вижу места, которое позволяет мне установить конечную точку службы. Не то чтобы я все равно мог видеть. В этом случае цель http://localhost/integration/webservices/mywebservices.asmx, но я могу быть где угодно. Неужели эта пешеходная проблема каким-то образом решена?
Ответы
Ответ 1
Попробуйте следующее:
MyWebServicesSoap port = service.getMyWebServicesSoap12();
BindingProvider provider = (BindingProvider) port;
provider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpoint);
В качестве альтернативы MyWebServices
могут иметь другие методы getXXX, которые принимают URL-адрес для местоположения WSDL
Ответ 2
Работа в cxf 2.6.1
Client client = ClientProxy.getClient(port);
client.getRequestContext().put(Message.ENDPOINT_ADDRESS, "http://some-valid-endpoint") ;