SOAPAction value not extracted in the inbound processing if the header name
does not match exactly "SOAPAction"
---------------------------------------------------------------------------------------------------------------
Key: CXF-3367
URL: https://issues.apache.org/jira/browse/CXF-3367
Project: CXF
Issue Type: Bug
Components: Soap Binding
Affects Versions: 2.3.2
Reporter: Aki Yoshida
Fix For: 2.3.3
The inbound processing uses
org.apache.cxf.binding.soap.interceptor.SoapActionInInterceptor to extract the
SOAPAction header from the protocol header and put it in the message's
property.The extraction code looks for the exact string "SOAPAction" in the
protocol header instead of looking for the soap action header in the
case-insenstive way.
We need to replace the line
{code}
List<String> sa = headers.get(SoapBindingConstants.SOAP_ACTION);
{code}
with
{code}
List<String> sa = null;
// if we had the normalized names in the map, we could've picked the header
directly
for (Map.Entry<String, List<String>> header: headers.entrySet()) {
if (SoapBindingConstants.SOAP_ACTION.equalsIgnoreCase(header.getKey())) {
sa = header.getValue();
break;
}
}
{code}
Instead of this simple change, we could change JettyHTTPDestination so that the
protocol headers are stored with e.g., the lowercased header names. But this
change would require changes in several other places to keep the current
behavior in lookup and also in serialization unchanged (e.g., people using the
constants to do the lookup and this should work as long as the original headers
match the constants and for the outbound case, people expect the current mixed
case serializaiton). And I dont think this is feasible in 2.3.x.
Regards, Aki
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira