Axis-dev – I wouldn’t belabor this
point, as SOAPAction has been a discussion by the W3C
XMLP committee for years with little concrete resolution/definition, but I have
a partner who is trying to connect a Flash client to Axis, and is running into
a few interop issues. I have a question on the handling and presence of the SOAP
action header. Is it required? It seems
that Axis requires a SOAP Action header, although my understanding of the SOAP
1.2 spec is that the header is optional…. Axis does use the URL to
define/doublecheck the service, so SOAP Action seems
redundant. Here’s the relevant AxisServlet.java
Code that throws a fault if SOAPAction is not present: “ tmp = (String) req.getHeader(
HTTPConstants.HEADER_SOAP_ACTION ); if ( tmp == null ) {
AxisFault af= new AxisFault( "Client.NoSOAPAction",
JavaUtils.getMessage("noHeader00", "SOAPAction"),
null, null );
log.debug(af);
throw af;
}” But the W3C SOAP 1.2 Part 2 Adjunct spec seems to indicate
that the value MAY be present rather than MUST: “Use of the SOAP
Action feature is OPTIONAL. SOAP Receivers MAY use it as a hint to optimise
processing, but SHOULD NOT require its presence in order to operate. Support
for SOAPAction is OPTIONAL in implementations. Implementations SHOULD NOT
generate or require SOAPAction UNLESS they have a particular purpose for doing
so (e.g., a SOAP Receivers specifies its use).” If Axis is requiring SOAPAction,
the specification states that we should be returning a special HTTP code, “The SOAP
Receiver SHOULD ensure that an HTTP status code of 427
(SOAPAction required) is returned to the
corresponding HTTP client.” Is this HTTP status code being set by
Axis? Although, from a pragmatic
viewpoint, if my client can’t set SOAPAction,
it probably can’t recognize the HTTP status code either…. Please let me know if my interpretation is correct, or if I should
file a patch. Thanks, Chris |