Я теперь использую 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();
Снова, нет никакого места, что я вижу в клиенте CXF API, который позволяет мне устанавливать сервисную конечную точку. Не то, чтобы я вижу так или иначе. В этом случае целью является http://localhost/integration/webservices/mywebservices.asmx, но я мог быть где угодно. Конечно, эта пешеходная проблема решена так или иначе?
Попробуйте следующее:
MyWebServicesSoap port = service.getMyWebServicesSoap12();
BindingProvider provider = (BindingProvider) port;
provider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpoint);
В качестве альтернативы MyWebServices
могут иметь другие методы getXXX, которые принимают URL-адрес расположения WSDL