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

Reply via email to