[
http://issues.apache.org/jira/browse/AXIS-1999?page=comments#action_66580 ]
Jason Sweeney commented on AXIS-1999:
-------------------------------------
This is my suggestion for the patch explained above. All changes are in the
org.apache.axis.transport.http.AxisServlet class.
Header, line 110:
// Location of the services as defined by the servlet-mapping in web.xml
public static final String INIT_PROPERTY_SERVICES_PATH =
"axis.servicesPath";
>>> // This will enforce the use of the SOAPAction HTTP header as mandated by
>>> the SOAP HTTP binding
>>> // See: http://issues.apache.org/jira/browse/AXIS-1999
>>> public static final String REQUIRE_SOAP_ACTION_HEADER =
>>> "axis.requireSOAPActionHeader";
// These have default values.
private String transportName;
Header, line 138:
/**
* Should we turn off the list of services when we receive a GET
* at the servlet root?
*/
private boolean disableServicesList = false;
>>> /**
>>> * This will enforce the use of the SOAPAction HTTP header as mandated by
>>> the SOAP HTTP binding
>>> * For several legacy systems, providing a custom HTTP header is difficult
>>> or impossible.
>>> * Since this is more of a technicality and no actual value is required in
>>> the header,
>>> * allowing the header to be optional by configuration enables legacy
>>> systems to send SOAP
>>> * documents to an application exposing services through the Axis framework.
>>> * See: http://issues.apache.org/jira/browse/AXIS-1999
>>> */
>>> private boolean requireSOAPActionHeader = true;
/**
* Cached path to JWS output directory
*/
private String jwsClassDir = null;
protected String getJWSClassDir() {return jwsClassDir;
}
init(), line 184:
servicesPath = getOption(context, INIT_PROPERTY_SERVICES_PATH,
"/services/");
>>> // This will enforce the use of the SOAPAction HTTP header as mandated
>>> by the SOAP HTTP binding
>>> // See: http://issues.apache.org/jira/browse/AXIS-1999
>>> requireSOAPActionHeader = JavaUtils.isTrue(getOption(context,
>>> REQUIRE_SOAP_ACTION_HEADER, "true"));
getSoapAction(), line 992
private String getSoapAction(HttpServletRequest req) throws AxisFault {
String soapAction = req.getHeader(HTTPConstants.HEADER_SOAP_ACTION);
if (isDebug) {
log.debug("HEADER_SOAP_ACTION:" + soapAction);
/**
* Technically, if we don't find this header, we should probably
fault.
* It's required in the SOAP HTTP binding.
*/
}
>>> // This will enforce the use of the SOAPAction HTTP header
>>> // as mandated by the SOAP HTTP binding
>>> // See: http://issues.apache.org/jira/browse/AXIS-1999
if (soapAction == null) {
>>>
>>> if (requireSOAPActionHeader) {
AxisFault af = new AxisFault("Client.NoSOAPAction",
Messages.getMessage("noHeader00",
"SOAPAction"),
null, null);
exceptionLog.error(Messages.getMessage("genFault00"), af);
throw af;
>>> }
>>> else {
>>> // Simply set the SOAP Action to the empty value
>>> soapAction = "\"\"";
>>> }
}
// the SOAP 1.1 spec & WS-I 1.0 says:
// soapaction = "SOAPAction" ":" [ <"> URI-reference <"> ]
// some implementations leave off the quotes
// we strip them if they are present
if (soapAction.startsWith("\"") && soapAction.endsWith("\"")
&& soapAction.length() >= 2) {
int end = soapAction.length() - 1;
soapAction = soapAction.substring(1, end);
}
if (soapAction.length() == 0) {
soapAction = req.getContextPath(); // Is this right?
}
return soapAction;
}
> Add configuration setting to bypass the SOAP HTTP binding requirement of a
> SOAPAction header
> --------------------------------------------------------------------------------------------
>
> Key: AXIS-1999
> URL: http://issues.apache.org/jira/browse/AXIS-1999
> Project: Axis
> Type: Improvement
> Components: Basic Architecture
> Versions: 1.2
> Environment: Irrelevant to this issue
> Reporter: Jason Sweeney
>
> In the org.apache.axis.transport.http.AxisServlet.getSoapAction() method,
> when no HTTP header is found for the name 'SOAPAction' (as defined in
> org.apache.axis.transport.http.HTTPConstants.HEADER_SOAP_ACTION), the process
> faults and returns an error. As you mention very clearly in the
> documentation of this method, this is "technically" correct and respects the
> letter of the SOAP HTTP binding specification.
> However, in the real world, there are numerous applications that would and
> could communication SOAP message to an application exposing "web services"
> with Axis but that cannot configure custom HTTP headers (usually because the
> protocol management is encapsulated in an external library that never
> envisionned this possibility). Since by everyone's admission this is really
> a technicality of the specification and in real life almost no web services
> implementations actually use the value of the SOAPAction header to set the
> service name information, we would like the next version of Axis to offer a
> configuration setting to ignore this requirement of the SOAP HTTP binding
> specification.
> A proposal would be to include a new global parameter named
> 'axis.requireSOAPActionHeader' that would default to 'true', hence preserving
> the exact functional behavior of the current version. However, when set to
> false, the fault code of the getSoapAction() method mentioned above would be
> simply skipped and the value associated to the SOAPAction header would be
> left to 'null'.
> This simple configuration setting would allow many new business uses of the
> Axis framework and extremely simply the incremental migration of the
> interaction of legacy systems with new modern web service based systems.
> Thanks!
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira