In the chapter 4.7.25 Describing SOAPAction of the basic profile http://www.ws-i.org/Profiles/BasicProfile-1.1-2004-08-24.html, it is indicated:
"Interoperability testing has demonstrated that requiring the SOAPAction HTTP header field-value to be quoted increases interoperability of implementations. Even though HTTP allows for header field-values to be unquoted, some implementations require that the value be quoted.
The SOAPAction header is purely a hint to processors. All vital information regarding the intent of a message is carried in the envelope.
R2744 A HTTP request MESSAGE MUST contain a SOAPAction HTTP header field with a quoted value equal to the value of the soapAction attribute of soapbind:operation, if present in the corresponding WSDL description.
R2745 A HTTP request MESSAGE MUST contain a SOAPAction HTTP header field with a quoted empty string value, if in the corresponding WSDL description, the soapAction of soapbind:operation is either not present, or present with an empty string as its value."
So a SOAPAction HTTP header must be present in the request and the SOAPAction HTTP header may be an empty string.
(However I think it is possible not to have SOAPAction HTTP header if the WSA-Addressing is enabled - It does not work on the BC SOAP component)
Currently,
the version 4.0.4 of the BC SOAP component
- gets the SOAP action from the HTTP header (the SOAP action can be an empty string)
- retrieve the operation in the WSDL thanks to the SOAP action (it takes the first operation found in the WSDL even if finds several operations)
the version 4.1-SNAPSHOT of the BC SOAP component
- gets the SOAP action from the HTTP header (the SOAP action can be an empty string)
- retrieve the operation in the WSDL thanks to the SOAP action (it does not take an operation if several operations are found)
- if it does not find an operation and only one operation, it looks the first child of the SOAP body (for interoperability but it is not correct)
A wsdl sample, Axis 1/2, cxf 2.x, WS-I and IOSW valid.
Put it into a soap su consumes, invoke any operation (with SOAP UI for example), and you always will have the first operation response: getInfo here.