I am testing web service integration with SiebleOnDemand.com. I was able to send an Account to Siebel’s web service with very litte effort from my laptop (IS and Developer running locally).
When I tried to send the SOAPRequest from my dev server (IS running on a server, Developer client running on my laptop), I got a strange error about SOAPAction being incorrect. It was a strange error because I can see I am sending the exact same SOAPAction in my dev environment as I am sending from my laptop.
I ran the org.apache.soap.util.net.TcpTunnelGui so I could see the SOAPRequest and SOAPResponse. When I ran the process using local instance of Developer w/ remote IS, and tunneled the request through TcpTunnelGui on my local machine, it worked!
I don’t get it. Does anyone know why this is?
Chris,
That does seem a bit weird. In theory, sending soap message A to service B should always produce the same results, regardless of what client or server sent the message.
Two quick things to check: 1) can you run a diff on the two soap request messages and confirm that they are, in fact, the same 2) are you using the same user credentials on both your development server and your laptop.
Most web services implementations no longer require SoapAction. IS still has it around for backward compatibility. In most cases you can set it to null and the service will still work correctly. However, some implementations are picky and still require a specific value. I’m not sure how SiebelOnDemand.com works.
Mark
Thanks, Mark.
I ran a diff yesterday and I saw the SOAPAction was the same on both requests. It got me thinking about web filters like websense. I know our security dept is running websense here. Do these tools replace urls and paths that contain suspicious content with values like “?”?
I’m not sure that Websense would mangle your message, but it is worth checking with your security folks. How are you getting the endpoint address in the service that is sending the soap request? From your dev box you would be sending to localhost (through TcpTunnelGui). How are you sending from the second server?
Mark
Mark,
I ran two tests in order to determine the source of the error. The first time I invoked the service, I left the SOAPAction value just as it was when I created the web service connector (document/urn:crmondemand/ws/account/10/2004:AccountInsert). Siebel on demand reported the following error:
<?xml><soap-env:envelope><soap-env:body><soap-env:fault><faultcode>SOAP-ENV:Client</faultcode><faultstring>SOAPAction '<?>' is of invalid format: SOAPAction should be of the form "rpc/operationName" or "document/operationName".(SBL-EAI-08006)</faultstring><detail><siebelf:errorstack><siebelf:error><siebelf:errorsymbol></siebelf:errorsymbol><siebelf:errormsg>SOAPAction '<?>' is of invalid format: SOAPAction should be of the form "rpc/operationName" or "document/operationName".(SBL-EAI-08006)</siebelf:errormsg></siebelf:error></siebelf:errorstack></detail></soap-env:fault></soap-env:body></soap-env:envelope>
Next, I delimited the SOAPAction value with double quotes (“document/urn:crmondemand/ws/account/10/2004:AccountInsert”). Everything worked fine.
Thanks for the good feedback, Mark. This has been a valuable learning experience.
BTW - I opened an OLD book of mine, “Programming Web Services with SOAP”, and found the following under “Contentious Issues”:
“The W3C working group that is standardizing SOAP is leaning towards deprecating the SOAPAction header in the next version of the protocol.” Since this book was printed in 2002, this might already be the case.