Thanks all,

When I take my same web service and deploy it on a Windows Server 2003
box (running IIS 6) rather than the Windows 2000 workstation server
that is was running on it works fine!!  This is not a problem for me
as the service I want to talk to will be running on a Windows 2003
environment, I had just been using a local workstation to play with.

I'll still dig around, see if I can see what the problem is, but it
looks to be some odd behaviour with IIS5 running on the workstation -
which sounds plausible.

Thanks for all your help, good to see that NTLM authentication does
indeed work and thanks to Dexter for clearly documenting all the steps
taken to get it working.

Regards,

Martin.

On 29/06/05, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> 
> 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>
> 
> _______________________________________________
> 
> 


-- 

http://www.woodwardweb.com

Reply via email to