[ 
https://issues.apache.org/jira/browse/CAMEL-9066?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Bob Blackard updated CAMEL-9066:
--------------------------------
    Attachment: soapjaxb-header-marshal-example.zip
                camel.patch

Attached are an project with example test cases which fail with current code, 
as well as the patch that resolved the issue and allows the test cases to run 
successfully.

> Include any headers unmarshalled by SoapJaxbDataFormat in content marshalled 
> by the same.
> -----------------------------------------------------------------------------------------
>
>                 Key: CAMEL-9066
>                 URL: https://issues.apache.org/jira/browse/CAMEL-9066
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-soap
>    Affects Versions: 2.12.5, 2.16.0, 2.15.3, 2.14.4, Future, 2.16
>         Environment: Any
>            Reporter: Bob Blackard
>              Labels: patch
>             Fix For: 2.16.0, 2.15.3, 2.14.4, Future, 2.16
>
>         Attachments: camel.patch, soapjaxb-header-marshal-example.zip
>
>
> The current implementation of the Soap11DataFormatAdapter and 
> Soap12DataFormatAdapter will never generate SOAP Headers when a JAXB object 
> is the inputObject.
> If the unmarshal is done with ignoreUnmarshalledHeaders set to false, then 
> the SoapJaxbDataFormat.SOAP_UNMARSHALLED_HEADER_LIST message header is 
> populated with a list of Objects or JAXBElement<?>s.  However, during the 
> doMarshal, this message header is never referenced.  Therefore, the sequence:
> from("direct:source").unmarshal(fromSoapDataFormat).process(doSomething).marshal(toSoapDataFormat).to("mock:end");
> will never produce SOAP Headers in the outbound document.
> The doUnmarshal passes the inputObject and an empty List<JAXBElement<?>> into 
> createContentFromObject.  However, is the inputObject is an ordinary JAXB 
> object (or JAXBElement<?>) then no header content will be created, and since 
> the Exchange isn't sent to createContentFromObject, the 
> SoapJaxbDataFormat.SOAP_UNMARSHALLED_HEADER_LIST cannot be referenced.
> It seems to me that, if ignoreUnmarshalledHeaders is false, and the 
> SoapJaxbDataFormat.SOAP_UNMARSHALLED_HEADER_LIST is non-empty, and in the 
> event the inbound Exchange does not contain an Exception, then the contents 
> of the SoapJaxbDataFormat.SOAP_UNMARSHALLED_HEADER_LIST should be added to 
> the headerContent before the call to createContentFromObject.
> I have checked the code for SoapJaxbDataFormat, Soap11DataFormatAdapter and 
> Soap12DataFormatAdapter from camel-soap 2.12.0 through 2.15.2 and it looks 
> like these three classes haven't changed.
> I crated a demo project and patch, originally against JBoss Fuse 6.1.0, but 
> offer it here for the camel-soap 2.12.x branch.  I have also applied and 
> tested the patch against camel-soap in the master branch (2.16-SNAPSHOT).  
> Indeed, it looks like this patch can be applied from any point 2.12 and 
> forward.
> The demo can be run against 2.12.5 (or any released version - just change the 
> camel.version property in the POM) to demonstrate what I think is the 
> failure.  It can also be run against a patched 2.12.6-SNAPSHOT or 
> 2.16-SNAPSHOT (again, just play around with the camel.version property) to 
> demonstrate what I think is correct behavior.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to