You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by "Kessler, Joerg" <jo...@sap.com> on 2017/05/15 13:07:02 UTC

Problem with MTOM in Camel-CXF

Hi,
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="<ro...@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="<ro...@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: <ro...@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. My proposal is to change this hard check on the class in CXF  to instanceof.

Best Regards,

Jörg

Re: Problem with MTOM in Camel-CXF

Posted by Dennis Kieselhorst <de...@apache.org>.
> I think Joerg's suggestion makes sense.
> The comments in the code talks about utilizing CXF's data-binding code
> and to do that, it is checking the class name. If anyone (e.g.,
> camel-cxf) is extending CXF's data-binding code and use it in CXF, I
> suppose it will make sense to provide the same behavior for them.

At first I also thought the change would make sense. However HybridSourceDataBinding doesn't support OutputStream. Discussion continued in JIRA issue: https://issues.apache.org/jira/browse/CXF-7388

Re: Problem with MTOM in Camel-CXF

Posted by Aki Yoshida <el...@gmail.com>.
I think Joerg's suggestion makes sense.
The comments in the code talks about utilizing CXF's data-binding code
and to do that, it is checking the class name. If anyone (e.g.,
camel-cxf) is extending CXF's data-binding code and use it in CXF, I
suppose it will make sense to provide the same behavior for them.

2017-05-23 10:10 GMT+02:00 Dennis Kieselhorst <de...@apache.org>:
> Hi Jörg,
>
> is there a similar testcase in https://github.com/apache/camel/tree/master/components/camel-cxf/src/test/java/org/apache/camel/component/cxf that we can use to reproduce it?
>
> According to comments in the CXF code this part of code was optimized to improve performance, so we need to discuss this before changing it. Can you please open an issue for it? https://issues.apache.org/jira/browse/CXF
>
> Cheers
> Dennis

Re: Problem with MTOM in Camel-CXF

Posted by Dennis Kieselhorst <de...@apache.org>.
Hi Jörg,

is there a similar testcase in https://github.com/apache/camel/tree/master/components/camel-cxf/src/test/java/org/apache/camel/component/cxf that we can use to reproduce it?

According to comments in the CXF code this part of code was optimized to improve performance, so we need to discuss this before changing it. Can you please open an issue for it? https://issues.apache.org/jira/browse/CXF

Cheers
Dennis