Hi,
your mileage might be different but I got the following to 
work. 

Server: 
windows 2003, .net web service with a single helloWorld method,
Service1.asmx Properties the "Enable anonymous access" is
unchecked and only "Integrated Windows authentication" is enabled.

Client:
same box, axis 1.2, java 1.5.0_01-b08. Able to call the .net
web service.

I did the following
0. Ran WSDL2Java to build the stub classes
1. In one of the generated classes I added my username, password
  Service1SoapStub.java
  ...
  _call.setUsername("<domain>\\<username>");
  _call.setPassword("<my password>");
3. compiled the files
4. created a client-config.wsdd file, I got this from the 
  axis.jar file. Updated 

  http ... http.CommonsHTTPSender
5. add this to CLASSPATH before the axis.jar
6. also added commons-httpclient-3.0-rc3.jar
   and commons-codec-1.3.jar

Cheers

 --- On Tue 06/28, Martin Woodward < [EMAIL PROTECTED] > wrote:
From: Martin Woodward [mailto: [EMAIL PROTECTED]
To: [email protected]
Date: Tue, 28 Jun 2005 15:05:37 +0100
Subject: Re: NTLM Authentication (again)

The latest version (3.0 RC3) of the Commons HttpClient works just fine<br>with 
NTLM.  Which suggests to me that something is going funny in 
the<br>org.apache.axis.transport.http.CommonsHTTPSender class.  I'll 
dig<br>around in the CommonsHTTPSender class, but I was wondering if 
anyone<br>had come across this before or actually got NTLM 
working...<br><br>Below is the code I used that just used the Commons 
HTTPClient class<br>to get an NTLM protected message (changed slightly to 
protect the<br>innocent).  I tried it against the same web service method that 
my<br>WDSL2Java generated call eventually winds up 
calling...<br><br>-----<br><br>package com.mrwpro.vsts.play;<br><br>import 
java.io.IOException;<br><br>import 
org.apache.commons.httpclient.Credentials;<br>import 
org.apache.commons.httpclient.HttpClient;<br>import 
org.apache.commons.httpclient.HttpException;<br>import 
org.apache.commons.httpclient.HttpMethodBase;<br>import 
org.apache.commons.httpclient.NTCredentials;<br>import 
org.apache.commons.httpclient.auth.AuthScope;<br>import 
org.apache.commons.httpclient.methods.GetMethod;<br><br>/**<br> * Get a NTLM 
secured page. <br> * @author martinwoodward<br> */<br>public class NTLMHttpTest 
{<br><br>  public static void main(String[] args) {<br>             <br>    
HttpClient httpClient = new HttpClient();<br>    Credentials credentials =  new 
NTCredentials("username",<br>"password", "remoteMachine", "MY_DOMAIN");<br>    
httpClient.getState().setCredentials(AuthScope.ANY,credentials);<br>    
HttpMethodBase method = 
new<br>GetMethod("http://remoteMachine/WebService/MyService.asmx/WhoAmI";);<br>  
 <br>    try {<br>      int returnCode = httpClient.executeMethod(method);<br>  
    String response = method.getResponseBodyAsString();<br>      
System.out.println("Response: " + response);<br>    } catch (HttpException e) 
{<br>      e.printStackTrace();<br>    } catch (IOException e) {<br>      
e.printStackTrace();<br>   
  
}<br>  <br>  
}<br>}<br><br>-----<br><br>Thanks,<br><br>Martin.<br><br><br><br><br><br>On 
28/06/05, Evgeny Beskrovny <[EMAIL PROTECTED]> wrote:<br>> I suggest you to 
write the code using the classes of Apache that connect to<br>> the NTLM server 
and see if it works. There is a big chance that it won't<br>> work since as far 
as I remember they don't support different parameters<br>> that can be set in 
NTLM for example usage of NTLM2 that server during the<br>> NTLM handshake 
might prescribe client to do.<br>> Evgeny<br>> <br>>             Martin 
Woodward<br>>             <martin.woodward@<br>>             gmail.com>         
                                        To<br>>                                 
      [email protected]<br>>             06/28/2005 01:30                 
                          cc<br>>             PM<br>>                           
                                        Subject<br>>                            
           Re: NTLM Authentication 
(again)<br>>             Please respond to<br>>             [EMAIL 
PROTECTED]<br>>                  he.org<br>> <br>> I'm pretty sure that that 
the Commons HTTPClient implementation (used<br>> by CommonsHTTPSender) has an 
implementation of NTLM in 3.0-RC3.  If I<br>> take out my credentials from the 
call then I get the following error<br>> when talking via the proxy<br>> <br>> 
No credentials available for NTLM <any realm>@mymachine:80<br>> <br>> Which 
would suggest that it is the Commons HTTPClient code that<br>> negotiating, not 
TCPMon.<br>> <br>> I am not creating the HTTP connection directly.  I am using 
a<br>> WSDL2Java generated stub which I have added a couple of lines to 
add<br>> my credentials to the _call in the createCall method.  I have 
then<br>> used the client-config.wsdd to override the default transport<br>> 
implementaion to the Commons one (which has NTLM support)<br>> <br>> Below if 
the contents of my client-config.msdd file...<br>> <br>> <?xml version="1.0" 
encoding="UTF-8"?><br>> <deployment name="defaultClientConfig"<br>> 
xmlns="http://xml.apache.org/axis/wsdd/";<br>> 
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java";><br>>  
<globalConfiguration><br>>    <parameter name="disablePrettyXML" 
value="true"/><br>>  </globalConfiguration><br>>  <transport name="http"<br>> 
pivot="java:org.apache.axis.transport.http.CommonsHTTPSender"/><br>>  <!-- 
transport name="http"<br>> 
pivot="java:org.apache.axis.transport.http.HTTPSender"/ --><br>>  <transport 
name="local"<br>> 
pivot="java:org.apache.axis.transport.local.LocalSender"/><br>>  <transport 
name="java"<br>> pivot="java:org.apache.axis.transport.java.JavaSender"/><br>> 
</deployment><br>> <br>> I think it is actually the<br>> 
org.apache.axis.transport.http.CommonsHTTPSender class that creates<br>> the 
URL connection - please let me know if I doing something daft or<br>> have 
mis-understood your point.<br>> <br>> Cheers,<br>> <br>> Martin.<br>> <br>> On 
28/06/05, Evgeny Beskrovny
  
<[EMAIL PROTECTED]> wrote:<br>> > Hi,<br>> > I think the reason it doesn't work 
for you is because in order to make it<br>> > work you need to have a Sun 
implementation of HTTPUrlConnection on a<br>> > client, while here as I 
understand you use HttpClient of Apache that<br>> might<br>> > have no 
implementation of NTLM. When you connect to a proxy it internally<br>> > uses 
Sun implementation of HTTPUrlConnection so it works.<br>> > When you create a 
URL on your client you would better use it this way<br>> ><br>> > handler = new 
sun.net.www.protocol.http.Handler();<br>> > urlToConnect    = new URL (null, 
urlPath.toString(),handler);<br>> > URLConnection connection = 
urlToConnect.openConnection();<br>> > Try this and see if it works.<br>> > 
Evgeny<br>> ><br>> >             Martin Woodward<br>> >             
<martin.woodward@<br>> >             gmail.com>                                 
                To<br>> >                                       
[email protected]<br>> >             06/27/2005 08:30                     
                      cc<br>> >             PM<br>> >                           
                                        Subject<br>> >                          
             NTLM Authentication (again)<br>> >             Please respond 
to<br>> >             [EMAIL PROTECTED]<br>> >                  he.org<br>> 
><br>> ><br>> > Hi,<br>> ><br>> > I'm trying to talk to a web service that 
requires NTLM authentication<br>> > for my sins.  The good news is that it 
works, the bad news is that I<br>> > have to proxy the request through a local 
instance of TCPmon to get it<br>> > to work.  Does this sound familiar to 
anyone, I could very possibly be<br>> > me doing something dumb...<br>> ><br>> 
> I am using axis-1_2_1, commons-httpclient-3.0-rc3, commons-codec-1.3<br>> > 
on j2sdk1.4.2_08 running in Windows XP Pro SP2.<br>> ><br>> > As I say, 
everything works fine if I run up TCPMonitor on my machine<br>> > 
and then include the following lines in my client...<br>> ><br>> > 
System.setProperty("http.proxyHost", "localhost");<br>> > 
System.setProperty("http.proxyPort", "8888");<br>> ><br>> > I've allready 
edited my stub to add the username/password and added a<br>> > 
client-config.wsdd to point to the CommonsHTTPSender.<br>> ><br>> > Below is 
the stack trace when I don't have the web service call proxied:-<br>> ><br>> > 
AxisFault<br>> > faultCode:<br>> 
{http://schemas.xmlsoap.org/soap/envelope/}Server.userException<br>> > 
faultSubcode:<br>> > faultString: java.net.SocketException: Connection 
reset<br>> > faultActor:<br>> > faultNode:<br>> > faultDetail:<br>> ><br>> > 
{http://xml.apache.org/axis/}stackTrace:java.net.SocketException:<br>> > 
Connection reset<br>> >             at<br>> 
java.net.SocketInputStream.read(SocketInputStream.java:168)<br>> >             
at<br>> > java.io.BufferedInputStream.fill(BufferedInputStream.java:183)<br>> > 
            at<br>> > 
java.io.BufferedInputStream.read(BufferedInputStream.java:201)<br>> >           
  at<br>> > 
org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:77)<br>> > 
            at<br>> > 
org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105)<br>> >   
          at<br>> ><br>> 
org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1110)<br>>
 <br>> ><br>> >             at<br>> ><br>> 
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.readLine(MultiThreadedHttpConnectionManager.java:1391)<br>>
 <br>> ><br>> >             at<br>> ><br>> 
org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1832)<br>>
 <br>> ><br>> >             at<br>> ><br>> 
org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1592)<br>>
 <br>> ><br>> >             at<br>> ><br>> 
org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:995)<br>>
 <br>> ><br>> >             
at<br>> ><br>> 
org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:393)<br>>
 <br>> ><br>> >             at<br>> ><br>> 
org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:168)<br>>
 <br>> ><br>> >             at<br>> ><br>> 
org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)<br>>
 >             at<br>> ><br>> 
org.apache.axis.transport.http.CommonsHTTPSender.invoke(CommonsHTTPSender.java:188)<br>>
 <br>> ><br>> >             at<br>> ><br>> 
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)<br>>
 <br>> ><br>> >             at<br>> > 
org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)<br>> >             
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)<br>> >             
at<br>> > org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)<br>> >  
           at org.apache.axis.client.Call.invokeEngine(Call.java:2765)<br>> >   
          at 
org.apache.axis.client.Call.invoke(Call.java:2748)<br>> >             at 
org.apache.axis.client.Call.invoke(Call.java:2424)<br>> >             at 
org.apache.axis.client.Call.invoke(Call.java:2347)<br>> >             at 
org.apache.axis.client.Call.invoke(Call.java:1804)<br>> >             at 
SNIP.whoAmI(SNIP.java:430)<br>> >             at 
com.mrwpro.vsts.play.TestClient.main(TestClient.java:30)<br>> ><br>> >          
   {http://xml.apache.org/axis/}hostname:tst-028-04452<br>> ><br>> > 
java.net.SocketException: Connection reset<br>> >             at 
org.apache.axis.AxisFault.makeFault(AxisFault.java:101)<br>> >             
at<br>> ><br>> 
org.apache.axis.transport.http.CommonsHTTPSender.invoke(CommonsHTTPSender.java:277)<br>>
 <br>> ><br>> >             at<br>> ><br>> 
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)<br>>
 <br>> ><br>> >             at<br>> > 
org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)<br>> >             
at 
org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)<br>> >             
at<br>> > org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)<br>> >  
           at org.apache.axis.client.Call.invokeEngine(Call.java:2765)<br>> >   
          at org.apache.axis.client.Call.invoke(Call.java:2748)<br>> >          
   at org.apache.axis.client.Call.invoke(Call.java:2424)<br>> >             at 
org.apache.axis.client.Call.invoke(Call.java:2347)<br>> >             at 
org.apache.axis.client.Call.invoke(Call.java:1804)<br>> >             at 
SNIP.whoAmI(SNIP.java:430)<br>> >             at 
com.mrwpro.vsts.play.TestClient.main(TestClient.java:30)<br>> > Caused by: 
java.net.SocketException: Connection reset<br>> >             at<br>> 
java.net.SocketInputStream.read(SocketInputStream.java:168)<br>> >             
at<br>> > java.io.BufferedInputStream.fill(BufferedInputStream.java:183)<br>> > 
            at<br>> > 
java.io.BufferedInputStream.read(BufferedInputStream.java:201)<br>> >      
  
      at<br>> > 
org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:77)<br>> > 
            at<br>> > 
org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105)<br>> >   
          at<br>> ><br>> 
org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1110)<br>>
 <br>> ><br>> >             at<br>> ><br>> 
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.readLine(MultiThreadedHttpConnectionManager.java:1391)<br>>
 <br>> ><br>> >             at<br>> ><br>> 
org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1832)<br>>
 <br>> ><br>> >             at<br>> ><br>> 
org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1592)<br>>
 <br>> ><br>> >             at<br>> ><br>> 
org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:995)<br>>
 <br>> ><br>> >             at<br>> ><br>> 
org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:393)<br>>
 <br>> ><br>> >             at<br>> ><br>> 
org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:168)<br>>
 <br>> ><br>> >             at<br>> ><br>> 
org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)<br>>
 >             at<br>> ><br>> 
org.apache.axis.transport.http.CommonsHTTPSender.invoke(CommonsHTTPSender.java:188)<br>>
 <br>> ><br>> >             ... 11 more<br>> ><br>> > When I do have it 
proxied, you see the 401 error coming back from the<br>> > server, followed by 
a 100 with the final 200 response containing the<br>> > answer.  When I run 
pointing to the proxy I also get the following<br>> > console output...<br>> 
><br>> > - Unable to find required classes (javax.activation.DataHandler 
and<br>> > javax.mail.internet.MimeMultipart). Attachment support is 
disabled.<br>> > - ntlm authentication scheme selected<br>> > - 
Discarding unexpected response: HTTP/1.1 100 Continue<br>> ><br>> > Any 
ideas?<br>> ><br>> > Thanks,<br>> ><br>> > Martin.<br>> ><br>> > --<br>> ><br>> 
> http://www.woodwardweb.com<br>> ><br>> ><br>> <br>> --<br>> <br>> 
http://www.woodwardweb.com<br>> <br>> <br><br><br>-- 
<br><br>http://www.woodwardweb.com<br>

_______________________________________________


Reply via email to