Hi, I am invoking a soap service (ServiceA) that invokes another soap service (ServiceB) using CXF with dataFormat=PAYLOAD. ServiceB, using MTOM, returns a base64Binary field (pdfContent) that is to be returned from ServiceA to the client (using MTOM).
CXF ENDPOINT *<cxf:cxfEndpoint xmlns:s="http://ws.a.service/v1 <http://ws.a.service/v1>"* * id="ServiceAEndpoint"* * address="/ServiceA_v1"* * endpointName="s:ServiceASoap_v1"* * serviceName="s:ServiceA_v1"* * serviceClass="service.a.ws.ServiceAV1"* * wsdlURL="wsdl/serviceA_v1.0.wsdl">* * <cxf:properties>* * <entry key="schema-validation-enabled" value="true" />* * <entry key="mtom-enabled" value="true" />* * </cxf:properties>* *</cxf:cxfEndpoint>* *<cxf:cxfEndpoint xmlns:s="http://ws.b.service/v1 <http://ws.b.service/v1>" id="ServiceBEndpoint" address="/ServiceB_v1" endpointName="s:ServiceBSoap_v1" serviceName="s:ServiceB_v1" serviceClass="service.b.ws.ServiceAV1" wsdlURL="wsdl/serviceB_v1.0.wsdl"> <cxf:properties> <entry key="schema-validation-enabled" value="true" /> <entry key="mtom-enabled" value="true" /> </cxf:properties></cxf:cxfEndpoint>* CAMEL ROUTE *<route id="ABRoute_v1">* * <from uri="**cxf:bean:**ServiceAEndpoint**?dataFormat=PAYLOAD* */>* * <removeHeaders pattern="*"/>* *<setHeader headerName="operationName">* * <simple>getPdf</simple>* * </setHeader>* * <to uri="xslt:xslt/getPdf.xsl"/>* *<to uri="cxf:bean:serviceB?dataFormat=PAYLOAD"/>* * <to uri="xslt:xslt/getPdfResponse.xsl"/>* * <process ref="getDocumentResponseProcessor"/>* *</route>* getPdfResponse.xsl *<xsl:template match="serviceB:getPdfResponse"> <serviceA:getDocumentResponse>* *....* *<serviceA:documentFile>* * <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include <http://www.w3.org/2004/08/xop/include>">* * <xsl:attribute name="href">* * <xsl:value-of select="serviceB:pdfContent/xop:Include/@href"/>* * </xsl:attribute>* * </xop:Include>* *</serviceA:documentFile>* *...* *</serviceA:getDocumentResponse>* getDocumentResponseProcessor *final Message in = exchange.getIn();* *LOG.info("**Attachments* *: {}", in.getAttachments().size());* *List<Source> elements = new ArrayList<>();* *elements.add(in.getBody(Source.class));* *CxfPayload<SoapHeader> cxfPayload = new CxfPayload<>(new ArrayList<>(),elements, null);* *in.setBody(cxfPayload);* CXF throws the following fault: *| INFO | ault-workqueue-2 | GetDocumentResponseProcessor ... | Attachments: 1* *| WARN | qtp585654247-71 | PhaseInterceptorChain | 74 - org.apache.cxf.cxf-core* *org.apache.cxf.interceptor.Fault: Could not generate the XML stream caused by: org.xml.sax.SAXParseException: cvc-type.3.1.2: Element 'serviceA:documentFile' is a simple type, so it must have no element information item [children]..* * at org.apache.cxf.databinding.source.XMLStreamDataWriter.write(XMLStreamDataWriter.java:99)[74:org.apache.cxf.cxf-core:3.0.4.redhat-621083]* * at org.apache.cxf.databinding.source.XMLStreamDataWriter.write(XMLStreamDataWriter.java:54)[74:org.apache.cxf.cxf-core:3.0.4.redhat-621083]* I am using Apache Camel 2.15.1, Blueprint and JBoss Fuse 6.2.1. Regards, Giacomo -- Giacomo Carnevale