[ https://issues.apache.org/jira/browse/CAMEL-6393?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Aki Yoshida reassigned CAMEL-6393: ---------------------------------- Assignee: Aki Yoshida > Making header propagation from cxf to camel consistent > ------------------------------------------------------ > > Key: CAMEL-6393 > URL: https://issues.apache.org/jira/browse/CAMEL-6393 > Project: Camel > Issue Type: Improvement > Components: camel-cxf > Affects Versions: 2.10.4 > Reporter: Aki Yoshida > Assignee: Aki Yoshida > Attachments: camel-cxf-patch.tar.gz > > > This is a proposed solution to the header cxf to camel header propagation > issue mentioned at > http://camel.465427.n5.nabble.com/propagating-multiple-header-entries-from-cxf-to-camel-td5732135.html > First, the current behavior is summarized as > (using the notation "source" -> "destination" in the following) > When propagating from Camel to CXF > DefaultCxfBinding's propagate method works as > List -> List > String -> List containing String > CxfHeaderHelper's propagate method works as > Object -> List containing Object.toString() > When propagating from CXF to Camel > Both DefaultCxfBinding's and CxfHeaderHelper's propagate methods work as > List -> String corresponding to List.get(0) > The proposed behavior will be summarized as follows: > We introduce a boolean property CxfProtocolHeadersMerged in camel exchange. > Propagating from Camel to CXF > List -> List > String -> List containing String > Propagating from CXF to Camel > if CxfProtocolHeadersMerged is true > List with one String-> String > List with more than one Strings -> String corresponding to the merged strings > if CxtProtocolHeadersMerged is false > List with one String -> String > List with more than one Strings -> List > When CxfProtocolHeadersMerged is set to false, the propagation behavior from > cxf to camel and camel to cxf is symmetric. A single value header is treated > as string in camel, whereas a multiple values header is treated as a list. > When CxfProtocolHeadersMerged is set to true, both types of headers are > treated as strings in camel. > I think setting the default value of CxfProtocolHeadersMerged to false is > more appealing. Although setting the default value to true makes the behavior > resemble to the current behavior of having always string valued headers when > the headers are propagated from cxf to camel, this behavior is asymmetric and > somehow inconsistent, as camel still allows a header with multiple values. > In contrast, setting the default value to false creates a symmetric behavior > in propagating headers of single or multiple values across the camel cxf > boarder. And as most headers are single valued, this behavior remains > identical to the current behavior for those single valued headers. > I am attaching the patch here. > I modified both DefaultCxfBinding and CxfHeaderHelper without > consolidating/reusing one code in the other. I suppose this part is in the > middle of consolidation and as such, I kept it as it is. > The test cases included. > Also corrected is the assertion's equals' ordering in somme existing test > case ("expected value", "test value") to get the error log printed correctly. > Please have a look at the change. > Thanks. > aki -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira