我正在为SharePoint 2007编写一个使用CXF Framework(版本:2.7.8)的SOAP客户端。我遵循联机文档以添加NTLM支持here。我有客户端工作并跟踪HTTP会话显示正在发送NTLM凭据,但是,我仍然收到401未经授权的响应。带有NTLM到SharePoint的CXF SOAP客户端
代码:
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来调用相同的列表Web服务我试图构建Java客户端,并使用NTLM成功进行身份验证。
我假设CXF和HTTPClient之间NTLM的实现是不同的。有关我的CXF实施有什么问题的任何想法?或者我可以如何获取它来镜像HTTPClient实现?
感谢您的答复。当我尝试你的建议时,我得到:'org.apache.cxf.transport.http.URLConnectionHTTPConduit无法转换为org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit'。我使用'ClientProxy.getClient(代理)'检索我的客户端。想法? – lamarvannoy
这对我来说非常好,谢谢@Jay! – jlr
为了使用org.apache.cxf.transport.http.URLConnectionHTTPConduit的org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit instread,我们需要将CXF传输转换为cxf-rt-transports-http-hc-x.x.x.jar –