Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
current (nightly), 1.4 Final
-
None
-
None
Description
When using Handlers, the name is taken from the SOAP Action, rather than the service name (as used to be the case). However, this is not good practice as SOAP Action is optional.
I've taken a look at what the SOAP (v1.1) and WSDL (v1.1) specs have to say about SOAPAction (see snippets below).
Based on my interpretation of these, I do not believe it is correct for us to build a SOAPAction, when none (or blank) is specified in the WSDL.
If the WSDL specifies a SOAPAction, then we should use that. If the application developer has additional information to the WSDL, they can set the SOAP action programmatically, via the Stub API.
Obviously, this still leaves the problem with handlers. I suggest we base handlers off the WSDL service names.
As an aside, there has been mention that .NET servers require SOAP Action be set. It is my belief that this is merely a requirement that WSDLs to .NET servers include the SOAP action rather than our client having to generate a SOAP Action "on the fly".
Extract from SOAP (v1.1) spec
6.1.1 The SOAPAction HTTP Header Field
The SOAPAction HTTP request header field can be used to indicate the
intent of the SOAP HTTP request. The value is a URI identifying the
intent. SOAP places no restrictions on the format or specificity of the
URI or that it is resolvable. An HTTP client MUST use this header field
when issuing a SOAP HTTP Request.
soapaction = "SOAPAction" ":" [ <"> URI-reference <"> ]
URI-reference = <as defined in RFC 2396 [4]>
(from RFC2396, 4. URI References [absoluteURI | relativeURI ] [ "#"
fragment ] )
The presence and content of the SOAPAction header field can be used by
servers such as firewalls to appropriately filter SOAP request messages
in HTTP. The header field value of empty string ("") means the intent
of the SOAP is provided by the HTTP Request-URI. No value means that
there is no indication of the intent of the message.
Examples:_____________________________________________
SOAPAction: "http://electrocommerce.org/abc#MyMessage"
SOAPAction: "myapp.sdl"
SOAPAction: ""
SOAPAction:
Extract from WSDL (v1.1) spec
3.4 soap:operation
<definitions .....>
<binding ....>
<operation ....>
<soap:operation soapAction="uri"? style="rpc|document"?>?
</operation>
</binding>
</definitions>
...
The soapAction attribute specifies the value of the SOAPAction header
for this operation. This URI value should be used directly as the
values for the SOAP-Action header; no attempt should be made to make a
relative URI value absolute whan making the request. For the HTTP
protocol binding of SOAP, this is value required (it has no default).
For other SOAP protocol bindings, it MUST NOT be specified, and the
soap:operation element MAY be omitted.