SOAPAction HTTP header value not copied correctly to from CXF message to Camel 
message header
---------------------------------------------------------------------------------------------

                 Key: CAMEL-3806
                 URL: https://issues.apache.org/jira/browse/CAMEL-3806
             Project: Camel
          Issue Type: Bug
          Components: camel-cxf
    Affects Versions: 2.6.0
         Environment: camel-cxf, CXF consumer endpoint with PAYLOAD data format 
            Reporter: Torsten Mielke


When using camel-cxf consumer endpoint with PAYLOAD data format, the 
SoapActionInInterceptor correctly strips off any double quotes surrounding the 
SOAPAction header value, e.g:
{code}
SOAPAction: "http://apache.org/hello_world_soap_http/greetMe";
{code}

and then sets this header on the message again:

{code:title=SoapActionInInterceptor.java}
public void handleMessage(SoapMessage message) throws Fault {
        String action = getSoapAction(message);
        if (!StringUtils.isEmpty(action)) {
            getAndSetOperation(message, action);
        }
    }
{code}

After the execution of getAndSetOperation(message, action), there are two 
SOAPAction headers set on the message. The original SOAPAction header value 
(with surrounding quotes) is part of the 
org.apache.cxf.message.Message.PROTOCOL_HEADERS. In addition the 
getAndSetOperation() method also adds 
SOAPAction=http://apache.org/hello_world_soap_http/greetMe header (without 
surrounding quotes). 

Later in 
org.apache.camel.component.cxf.DefaultCxfBinding.propagateHeadersFromCxfToCamel(),
 when the CXF message headers get copied to the Camel message, it only 
retrieves the org.apache.cxf.message.Message.PROTOCOL_HEADERS:

{code}
Map<String, List<String>> cxfHeaders = 
(Map)cxfMessage.get(Message.PROTOCOL_HEADERS);
{code}

The SOAPAction header in PROTOCOL_HEADERS wasn't changed by the 
SoapActionInInterceptor and hence still has enclosed double quotes. These 
headers then get copied to the Camel In message headers. The header that was 
set by the SoapActionInInterceptor 
SOAPAction=http://apache.org/hello_world_soap_http/greetMe does not get copied!

If later in a Camel route a custom Camel Processor tries to resolve this 
SOAPAction header, it gets the the value with surrounding double quotes, but 
these should actually have been stripped off. 

This behavior is a bug.



--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to