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

        

Reply via email to