aspose file tools*
The moose likes Web Services and the fly likes SOAP Header Authentication!!! Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Soft Skills this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Java » Web Services
Bookmark "SOAP Header Authentication!!!" Watch "SOAP Header Authentication!!!" New topic
Author

SOAP Header Authentication!!!

K Saleem
Greenhorn

Joined: Aug 03, 2004
Posts: 4
Dear Friends,

I am trying to access webservices using java client. I am getting following error:

Fault Code = soap:Server

Fault String = Server was unable to process request. --> Authentication failed. Subscription ID is empty


The service provider providing clinet in .NET ,and our requirement is to use the same service( to find the distance betweent two zip code) in Java.

I have to set sessionID in the header , so the webservice authenticate me in order to use this service.

Please share any sample code, that is doing similar functionality, or kind of help to resolve this problem.


any help in this regard would be highly appreciated.


http://www.codebump.com/services/ZipCodeLookup.asmx?op=GetDistanceBetweenZipCodes
http://www.codebump.com/services/ZipCodeLookup.asmx?WSDL



********************** SOAP REQUEST ****************************************
POST /services/ZipCodeLookup.asmx HTTP/1.1
Host: www.codebump.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://skats.net/services/GetDistanceBetweenZipCodes"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://skats.net/services/" xmlns:types="http://skats.net/services/encodedTypes" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<tns:AuthenticationHeader>
<SessionID xsi:type="xsd:string">string</SessionID>
</tns:AuthenticationHeader>
</soap:Header>

<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<tns:GetDistanceBetweenZipCodes>
<zip1 xsi:type="xsd:string">string</zip1>
<zip2 xsi:type="xsd:string">string</zip2>
</tns:GetDistanceBetweenZipCodes>
</soap:Body>
</soap:Envelope>

****************************************************************************************

********************** SOAP Response ****************************************
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://skats.net/services/" xmlns:types="http://skats.net/services/encodedTypes" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<tns:GetDistanceBetweenZipCodesResponse>
<GetDistanceBetweenZipCodesResult xsi:type="xsd:float">float</GetDistanceBetweenZipCodesResult>
</tns:GetDistanceBetweenZipCodesResponse>
</soap:Body>
</soap:Envelope>
****************************************************************************************


Thanks,

KS


KS
Lasse Koskela
author
Sheriff

Joined: Jan 23, 2002
Posts: 11962
    
    5
Did you read the explanation on this page?

NOTE: This service requires a subscription.
You can register online using Subscriptions interface. There're several types of subscriptions available including a free subscription so you can continue using the web service without paying. When you subscribe you will be issued a subscriber ID that uniquely identify you. You must submit that ID with every request by setting AuthenticationHeader SOAP header. Consult WSDL for more information.


Author of Test Driven (2007) and Effective Unit Testing (2013) [Blog] [HowToAskQuestionsOnJavaRanch]
K Saleem
Greenhorn

Joined: Aug 03, 2004
Posts: 4
Yes, I have the subscription id and able to access the service using .NET client and a web interface.

KS
Lasse Koskela
author
Sheriff

Joined: Jan 23, 2002
Posts: 11962
    
    5
Doh. Of course. Sorry...

You could use a JAX-RPC handler to add the necessary SOAP Header elements. Here's a sketch:

(no guarantees -- I haven't even compiled it)
K Saleem
Greenhorn

Joined: Aug 03, 2004
Posts: 4
Thanks,

Here is the code we are using to call the service and geting the following error

Generated fault:

Fault Code = soap:Server

Fault String = Server was unable to process request. --> Authentication failed. Subscription ID is empty

Regards,
KS

Lasse Koskela
author
Sheriff

Joined: Jan 23, 2002
Posts: 11962
    
    5
Can you compare the outgoing SOAP request from the .NET client and the Java client?
K Saleem
Greenhorn

Joined: Aug 03, 2004
Posts: 4
request is same, but we have no tool to compare or get the request format.
from either client..
but the proper format of the request as follows

Here the request format is defined.
http://www.codebump.com/services/ZipCodeLookup.asmx?op=GetDistanceBetweenZipCodes

Lasse Koskela
author
Sheriff

Joined: Jan 23, 2002
Posts: 11962
    
    5
Sure you can. You just need to start a proxy like Grinder's TCP Sniffer on your client machine and change the .NET client and Java client to use "http://localhost:xxxx/foo" instead of "http://codebump.com/services/zipcodelookup.asmx" where xxxx is the port number you configured your proxy to listen.

You'll be able to see exactly what your client is sending over the TCP connection and compare the requests sent by the different clients.
[ August 04, 2004: Message edited by: Lasse Koskela ]
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: SOAP Header Authentication!!!