Подтвердить что ты не робот

Клиент 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, но я могу быть где угодно. Неужели эта пешеходная проблема каким-то образом решена?

4b9b3361

Ответ 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") ;