Hi, 

I did not try HttpAsyncClient but just the normal HttpClient NTCredentials. 
Does this matter? 
I'm still getting 401 Unauthorized.

I even tried to turn off chunking... 

The code:

                URL wsdlURL = new 
URL(getInstance().getClass().getClassLoader().getResource("wsdl/Lists.wsdl").toExternalForm());
                Lists service = new Lists(wsdlURL, new 
QName("http://schemas.microsoft.com/sharepoint/soap/";, "Lists"));

                port = service.getListsSoap();
                
                Client client = ClientProxy.getClient(port);
                HTTPConduit http = (HTTPConduit) client.getConduit();
                HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
                 
                httpClientPolicy.setConnectionTimeout(36000);
                httpClientPolicy.setAllowChunking(false);
                httpClientPolicy.setReceiveTimeout(32000);
                 
                http.setClient(httpClientPolicy);
                
                
((BindingProvider)port).getRequestContext().put("thread.local.request.context", 
"true");
                Credentials creds = new NTCredentials(username, password, null, 
domain); 
                ((BindingProvider) 
port).getRequestContext().put(Credentials.class.getName(), creds);
                
                ((BindingProvider) 
port).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
                ((BindingProvider) 
port).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);

                ((BindingProvider) port).getRequestContext().put(
                        BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
"http://machine/_vti_bin/Lists.asmx";);

Only issue I can think off is the format of username/password/domain. I used: 
"username"/"password"/"DOMAIN" (also tried "DOMAIN\username")... 


Everything works if I use the format "DOMAIN\username" / "password" and call 
from main...

  NtlmAuthenticator authenticator = new NtlmAuthenticator(username, password);
  Authenticator.setDefault(authenticator);
 


class NtlmAuthenticator extends Authenticator {

    private final String username;
    private final char[] password;

    public NtlmAuthenticator(final String username, final String password) {
        super();
        this.username = username;
        this.password = password.toCharArray(); 
    }

    public PasswordAuthentication getPasswordAuthentication() {
        return (new PasswordAuthentication (username, password));
    }
}


It's also no problem if I have to create a proxy for each thread... as long 
authentication works, that is.


                                          

Reply via email to