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="<[email protected]>"; 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="<[email protected]>"; 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: <[email protected]>
<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
