cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Joerg Kessler (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CXF-7388) Problem with MTOM in Camel-CXF
Date Tue, 30 May 2017 10:43:04 GMT

    [ https://issues.apache.org/jira/browse/CXF-7388?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16029254#comment-16029254
] 

Joerg Kessler commented on CXF-7388:
------------------------------------

Hi,
I added the maven project. A SOAP message is sent via Camel direct endpoint to a cxf endpoint
that uses the same WSDL as in one of the CXF MTOM unit tests and where MTOM is enabled. Another
Camel route receives the message via CXF endpoint where MTOM is not enabled. An interceptor
checks here whether an attachment was received. CXF payload logging is active so you should
see the payload above that I pasted to this ticket.

> Problem with MTOM in Camel-CXF
> ------------------------------
>
>                 Key: CXF-7388
>                 URL: https://issues.apache.org/jira/browse/CXF-7388
>             Project: CXF
>          Issue Type: Bug
>    Affects Versions: 3.1.9
>            Reporter: Joerg Kessler
>             Fix For: 3.2.0
>
>         Attachments: cxf.client.test.sync.junit.ext.zip
>
>
> Hi,
> I posted this on the CXF user list without getting a response (except from Aki who supports
this);
> We use CXF 3.1.9 together with Camel 2.17.4. We want to enable MTOM on the Camel-CXF
producer. To test it I created a simple route using Camel test infrastructure where the producer
uses a WSDL with base64 encoded payload parts. But in the log output of CXF I always get a
payload like this
> Http-Method: POST
> Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:2a84a041-d9ce-4caf-a8e1-b4247e1ad6d6";
start="<root.message@cxf.apache.org>"; start-info="text/xml"
> Headers: {Accept=[*/*], breadcrumbId=[ID-WDFN32392889A-65347-1494850621554-0-1], Cache-Control=[no-cache],
connection=[keep-alive], Content-Length=[487], content-type=[multipart/related; type="application/xop+xml";
boundary="uuid:2a84a041-d9ce-4caf-a8e1-b4247e1ad6d6"; start="<root.message@cxf.apache.org>";
start-info="text/xml"], Host=[localhost:8770], Pragma=[no-cache], SOAPAction=[""], User-Agent=[Apache-CXF/3.1.9]}
> Payload: --uuid:2a84a041-d9ce-4caf-a8e1-b4247e1ad6d6
> Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
> Content-Transfer-Encoding: binary
> Content-ID: <root.message@cxf.apache.org>
> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><typ:testXop
xmlns:typ="http://cxf.apache.org/mime/types"><typ:name>?</typ:name><typ:attachinfo>U1VDQ0VTUw==</typ:attachinfo></typ:testXop></soap:Body></soap:Envelope>
> --uuid:2a84a041-d9ce-4caf-a8e1-b4247e1ad6d6--
> This is not MTOM. The endpoint configuration is
>     <cxf:cxfEndpoint id="clientEndpoint" address="http://localhost:8770/cxf/mtom"
bus="ClientBus" wsdlURL="wsdl/mtom_xop.wsdl">
>         <cxf:properties>
>             <entry key="dataFormat" value="PAYLOAD" />
>             <entry key="defaultOperationName" value="testXop" />
>             <entry key="defaultOperationNamespace" value="http://cxf.apache.org/mime"/>
>             <entry key="mtom-enabled" value="true" />
>         </cxf:properties>
>     </cxf:cxfEndpoint>
> Here I even used a WSDL that is used in the CXF MTOM tests. Then I compared the execution
of the relevant interceptors in Camel-CXF and CXF and found one difference:
> In AbstractOutDatabindingInterceptor. writeToOutputStream() it is checked that the data
binding is implemented by the class org.apache.cxf.jaxb.JAXBDataBinding. That is correct for
CXF but Camel-CXF sets in CxfEndpoint the  binding to org.apache.camel.component.cxf.HybridSourceDataBinding
which is derived from JAXBDataBinding but of course is a different class. This seems to prevent
the completion of the MTOM conversion. I changed the code locally so that now all subclasses
are accepted and now the attachment processing gets really called. But now the next problem
apears; HybridSourceDataBinding.createWriter() raises an exception:
> java.lang.UnsupportedOperationException: The type java.io.OutputStream is not supported.
> 	at org.apache.camel.component.cxf.HybridSourceDataBinding.createWriter(HybridSourceDataBinding.java:87)
> I guess the method getSupportedWriterFormats of JAXBDataBinding/HybridSourceDataBinding
should prevent something like this but in this case it does not work.
> I am also unsure whether the problem is now really in CXF or in Camel-CXF. Therefore
please forward it to Camel if the problem is locarted there. 
> Best Regards,
> Jörg



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Mime
View raw message