[SOAPAction] Error: Unable to determine operation id
To try to make it easier for those who google with error message, here are two possible explanations for this error message, when using JAX-RPC based Web Service runtine.
a) The value of the SOAPAction attribute on the HTTP Header on the wire do not match with the value expected by the service endpoint, as advertised on the WSDL soap:binding.
Wire sample:
WSDL snippet:
Note: the use of the quote is highly recommended for better interoperability.
b) If the service do not rely on this HTTP header to route incomming messages to specific operation (uses empty value in the WSDL soap:binding), it will use the fully qualified name (or QName) of the first child of the soap:body element to route the incomming message -- {http://siebel.com/OrderManagement/Quote/PSP}CalculatePrice_Input in the example below. If the value on the wire does not match with the one expected (and advertized in the WSDL), you may get the error message listed above. In such case, make sure that the name is properly qualified. A common mistake here is to use the wrong namespace.
a) The value of the SOAPAction attribute on the HTTP Header on the wire do not match with the value expected by the service endpoint, as advertised on the WSDL soap:binding.
Wire sample:
...
User-Agent: Oracle HTTPClient Version 10h
SOAPAction: "CalculatePrice"
...
WSDL snippet:
44 <binding name="XmlCalculatePricePort" type="tns:XmlCalculatePricePort">
45 <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
46 style="document"/>
47 <operation name="CalculatePrice">
48 <soap:operation soapAction="CalculatePrice"/>
49 <input>
50 <soap:body use="literal"/>
51 </input>
52 <output>
53 <soap:body use="literal"/>
54 </output>
55 </operation>
56 </binding>
Note: the use of the quote is highly recommended for better interoperability.
b) If the service do not rely on this HTTP header to route incomming messages to specific operation (uses empty value in the WSDL soap:binding), it will use the fully qualified name (or QName) of the first child of the soap:body element to route the incomming message -- {http://siebel.com/OrderManagement/Quote/PSP}CalculatePrice_Input in the example below. If the value on the wire does not match with the one expected (and advertized in the WSDL), you may get the error message listed above. In such case, make sure that the name is properly qualified. A common mistake here is to use the wrong namespace.
1 <?xml version = '1.0' encoding = 'UTF-8'?>
2 <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
3 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xmlns:ns0="http://siebel.com/OrderManagement/Quote/PSP">
6 <env:Body>
7 <ns0:CalculatePrice_Input>
8 <ListOfQuote xmlns="http://siebel.com/OrderManagement/Quote/Data">
9 <Quote>
Comments