Я пишу клиент SOAP с использованием CXF Framework (версия: 2.7.8) для SharePoint 2007. Я следил за онлайн-документацией для добавления поддержки NTLM here. У меня работает клиент, и отслеживание сеанса HTTP показывает, что передаются учетные данные NTLM, однако я все еще получаю неавторизованный ответ 401.Клиент CXF SOAP с NTLM для SharePoint
Код:
Lists listService = new Lists();
ListsSoap port = listService.getListsSoap();
BindingProvider bp = (BindingProvider) port;
bp.getRequestContext().put("use.async.http.conduit", Boolean.TRUE);
Credentials creds = new NTCredentials(USER, PASS, "", DOMAIN);
bp.getRequestContext().put(Credentials.class.getName(), creds);
Client client = ClientProxy.getClient(proxy);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(36000);
httpClientPolicy.setAllowChunking(false);
httpClientPolicy.setAutoRedirect(true);
http.setClient(httpClientPolicy);
// Build request and execute
Интересно, что я написал подобный клиент, используя HTTP PUT для WebDAV для загрузки документов с помощью библиотеки Apache HTTPClient, и был в состоянии успешно пройти проверку подлинности с помощью NTLM. Кроме того, я смог использовать SOAPUI для вызова той же самой веб-службы списков, к которой я пытаюсь создать клиент Java, и успешно ее аутентифицировал с помощью NTLM.
Я предполагаю, что реализация NTLM отличается между CXF и HTTPClient. Любые мысли о том, что не так с моей реализацией CXF? Или как я могу заставить его отразить реализацию HTTPClient?
Спасибо за ответ. Когда я попробую ваше предложение, я получаю: 'org.apache.cxf.transport.http.URLConnectionHTTPConduit не может быть передан в org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit'. Я извлекаю свой клиент, используя 'ClientProxy.getClient (proxy)'. Идеи? – lamarvannoy
Это работало очень хорошо для меня, спасибо @Jay! – jlr
Чтобы использовать org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit instread для org.apache.cxf.transport.http.URLConnectionHTTPConduit, нам нужно изменить CXF trannsport на cxf-rt-transports-http-hc-x.x.x.jar –