You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Bob Blackard (JIRA)" <ji...@apache.org> on 2015/08/10 07:08:45 UTC

[jira] [Updated] (CAMEL-9066) Include any headers unmarshalled by SoapJaxbDataFormat in content marshalled by the same.

     [ 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)