Author |
Message
|
pottas |
Posted: Mon Mar 31, 2008 5:12 am Post subject: SOAP Version Support |
|
|
 Disciple
Joined: 27 Oct 2005 Posts: 185 Location: South Africa
|
I am running WMB 6.1.
My question is two-fold:
Question 1:
I designed a flow that has an HTTPInput Node as a Web Service Provider. When you create the flow by dropping 'deployable wsdl'on the canvas it creates the basic flow for you as well as a subflow that extracts the body out of the SOAP message. All good and well so far.
When I put a SOAP 1.1 message through the flow that has the following namespace (http://schemas.xmlsoap.org/soap/envelope/), it works like a charm. But when I put a SOAP 1.2 message (namespace: http://www.w3.org/2003/05/soap-envelope) through the same flow, it abends.
So I suspect the Broker has a problem with SOAP 1.2, but from the documentation it seems like it should support 1.1 as well as 1.2.
I am asking for some direction on this, please?
Question 2:
Also, when I call a service on our host with a SOAP 1.2 message, it abends with the follwing error:
Quote: |
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:VersionMismatch</faultcode>
<faultstring>SOAP version not supported</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope> |
I did investigate this error, and the description of the error is:
Quote: |
The namespace of the SOAP-ENV element indicates that this message is intended for a server implementing a different version of the SOAP protocol; e.g. a SOAP 1.2 message has been sent to a SOAP 1.1 server. |
It is quite clear what the error is, my question is - what do I need to change to solve this? |
|
Back to top |
|
 |
jefflowrey |
Posted: Mon Mar 31, 2008 5:24 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
I think you need to use a SOAPInput node instead of an HTTPInput node. _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
mgk |
Posted: Mon Mar 31, 2008 8:04 am Post subject: |
|
|
 Padawan
Joined: 31 Jul 2003 Posts: 1642
|
What did the message you sent in look like? Can you paste it here (along with the HTTP Headers). Did you make sure the content-type was correct for SOAP-1.2? _________________ MGK
The postings I make on this site are my own and don't necessarily represent IBM's positions, strategies or opinions. |
|
Back to top |
|
 |
pottas |
Posted: Mon Mar 31, 2008 11:09 pm Post subject: |
|
|
 Disciple
Joined: 27 Oct 2005 Posts: 185 Location: South Africa
|
Thanks for the replies, jeff and mgk,
The message I try putting through is something like this:
Quote: |
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<soapenv:Header>
<a:Action>http://contracts.it.nednet.co.za/services/customer-services/2007-07-21/Customer/CustLocate</a:Action>
<a:MessageID>urn:uuid:e890e0b7-da37-404f-9c92-a88e64172c7b</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
</soapenv:Header>
<soapenv:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CustLocateRq xmlns="http://contracts.it.nednet.co.za/services/customer-services/2007-07-21/Customer">
<CustomerSearchKey>
<Name></Name>
<CustNo>191169802002</CustNo>
<CustId></CustId>
</CustomerSearchKey>
<PostalCdFilter></PostalCdFilter>
<BirthDateFilter></BirthDateFilter>
<StreetNo></StreetNo>
<CrossCompanyLocate></CrossCompanyLocate>
<AddrUseCdFilter></AddrUseCdFilter>
<ChunkRequestHdr>
<ContinuationValue></ContinuationValue>
<MaxRecords></MaxRecords>
</ChunkRequestHdr>
</CustLocateRq>
</soapenv:Body>
</soapenv:Envelope> |
When I use a SOAPInput node, it doesn't even get to the endpoint as defined in the exposed service within Broker.
So I reverted to an HTTPInput Node. Then, when I pass this message to the endpoint, it abends on the SOAPExtract Node with an error:
Quote: |
n invalid SOAP message was received in the SOAPExtract node: Customer_2007-07-21_B1.0_CustLocate.Extract |
mgk, hopefully this gives you some idea.
The other thing that we did now was to change the Host service to accept this kind of message and if I call the Host using Soap-UI with the above message it works fine.
Now the question is: I used the WSDL version to generate my SOAP flows within Broker. Does the version of the WSDL determine the SOAP message that would be parsed through Broker - in other words do I need a different version of the WSDL definition (possibly version 1.2 or something) to be able to validate the above SOAP 1.2 message? Can I then generate a flow that uses SOAP Input Nodes with success? |
|
Back to top |
|
 |
mgk |
Posted: Tue Apr 01, 2008 12:56 am Post subject: |
|
|
 Padawan
Joined: 31 Jul 2003 Posts: 1642
|
The SOAPExtract / SOAPEnvelope nodes do not handle SOAP 1.2. However, all the other SOAP nodes do. So if you use a SOAPInput node and drop the WDSL onto the node directly (or edit the generated flow and remove the SOAPExtract node - you can replace it with a RouteToLabel node and set the 'labelPrefix' on the SOAPInout node to 'ws_' to get almost the same behaviour (except that you keep the SOAP Domain Tree)) then the flow will handle the message correctly. _________________ MGK
The postings I make on this site are my own and don't necessarily represent IBM's positions, strategies or opinions. |
|
Back to top |
|
 |
pottas |
Posted: Tue Apr 01, 2008 4:13 am Post subject: |
|
|
 Disciple
Joined: 27 Oct 2005 Posts: 185 Location: South Africa
|
OK, thanks MGK you were spot-on with the SOAPExtract / SOAPEnvelope nodes that doesn't handle SOAP 1.2 messages. So I tried the SOAPInput Nodes, but it had a problem with parsing the message.
Then I tried the HTTPInput nodes, getting rid of all the Envelope and Extract stuff - this seemed to work just fine handling a SOAP 1.2 message.
So my question is this: When do I use SOAPInput Nodes and when do I use HTTPInput Nodes?
...oh, and one of the guys here just told me that the WSDL that we used has a binding for soap 1.1 only. Would this explain the parsing error I get when using SOAPInput Nodes with SOAP 1.2 message? |
|
Back to top |
|
 |
jefflowrey |
Posted: Tue Apr 01, 2008 4:16 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
pottas wrote: |
..oh, and one of the guys here just told me that the WSDL that we used has a binding for soap 1.1 only. Would this explain the parsing error I get when using SOAPInput Nodes with SOAP 1.2 message? |
 _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
mgk |
Posted: Tue Apr 01, 2008 5:35 am Post subject: |
|
|
 Padawan
Joined: 31 Jul 2003 Posts: 1642
|
Well if you had posted the error message I could help you more, but this is almost certainly the problem. The SOAPInput node will validate that the SOAP message matches the WSDL that defines it. Therefore, it will expect SOAP1.1 if the WSDL binding is SOAP 1.1.
You can use the HTTP nodes when you don't have WSDL, or your WSDL does not match the messages you are sending for some reason (which is your case here), or you are not using SOAP (as the HTTP nodes allow any type of data to be flowed over HTTP).
Regards, _________________ MGK
The postings I make on this site are my own and don't necessarily represent IBM's positions, strategies or opinions. |
|
Back to top |
|
 |
|