You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by AUYEUNG Andy <An...@3ds.com> on 2009/01/23 20:03:09 UTC
NTLM Authentication Problem
I am using axis2's ServiceClient to call to a webservice outside my
company's network. However, I got an error that said that there was a
NTLM challenge.
(SEVERE: Credentials cannot be used for NTLM authentication:
org.apache.commons.httpclient.UsernamePasswordCredentials
org.apache.commons.httpclient.auth.InvalidCredentialsException:
Credentials cannot be used for NTLM authentication:
org.apache.commons.httpclient.UsernamePasswordCredentials)
Here is what I don't understand.
1. When I use the ServiceClient to call to a webservice that is inside
the network, everything was fine. (Expected !)
2. When I use the ServiceClient to call to a webservice that is outside
the network, I got NTLM challenge. (hmm, OK...)
3. When I use the plain Java client to call to the same webservice that
is outside the network, everything was fine. (What ?)
Below are the code of 2 and 3 respectively. Anyone know why and the
solution to make 2 work ?
================================================================
public class Scenario1iClient {
public static void main(String[] args) throws Exception {
ServiceClient client = new ServiceClient();
Options opts = new Options();
opts.setTo(new
EndpointReference("http://ws.cdyne.com/ip2geo/ip2geo.asmx"));
opts.setAction("urn:ResolveIP");
client.setOptions(opts);
OMElement res = client.sendReceive(createPayLoad());
}
public static OMElement createPayLoad() {
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs =
fac.createOMNamespace("http://ws.cdyne.com/IP2Geo", "ns1");
OMElement method = fac.createOMElement("ResolveIP", omNs);
OMElement value1 = fac.createOMElement("ipAddress", omNs);
value1.setText("69.147.76.15");
method.addChild(value1);
OMElement value2 = fac.createOMElement("licenseKey", omNs);
value2.setText("0");
method.addChild(value2);
System.out.println("method:"+method.toString());
return method;
}
}
=======================================================================
public class HttpTest3 {
public static void main(String[] args) throws Exception
{
String httpsURL = "http://ws.cdyne.com/ip2geo/ip2geo.asmx";
String urlParameters = "<soapenv:Envelope\n"+
"xmlns:q0=\"http://ws.cdyne.com/IP2Geo\
<http://ws.cdyne.com/IP2Geo/> "\n"+
"xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\
<http://schemas.xmlsoap.org/soap/envelope/> "\n"+
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\
<http://www.w3.org/2001/XMLSchema/> "\n"+
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\
<http://www.w3.org/2001/XMLSchema-instance/> ">\n"+
"<soapenv:Header>\n"+
"</soapenv:Header>\n"+
"<soapenv:Body>\n"+
"<q0:ResolveIP>\n"+
"<q0:ipAddress>69.147.76.15</q0:ipAddress>\n"+
"<q0:licenseKey>0</q0:licenseKey>\n"+
"</q0:ResolveIP>\n"+
"</soapenv:Body>\n"+
"</soapenv:Envelope>\n";
URL myurl = new URL(httpsURL);
HttpURLConnection con =
(HttpURLConnection)myurl.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "text/xml;
charset=utf-8");
con.setRequestProperty("Content-Length", "" +
Integer.toString(urlParameters.getBytes().length));
con.setRequestProperty("Content-Language", "en-US");
con.setRequestProperty("SOAPAction",
"\"http://ws.cdyne.com/IP2Geo/ResolveIP\
<http://ws.cdyne.com/IP2Geo/ResolveIP/> "");
con.setUseCaches (false);
con.setDoInput(true);
con.setDoOutput(true);
//Send request
DataOutputStream wr = new DataOutputStream (con.getOutputStream
());
wr.writeBytes (urlParameters);
wr.flush ();
wr.close ();
InputStream ins = con.getInputStream();
InputStreamReader isr=new InputStreamReader(ins);
BufferedReader in =new BufferedReader(isr);
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}