在WSO2 ESB中执行工件时发生SOAPProcessingException

时间:2019-05-29 06:07:58

标签: wso2 wso2esb mediator

我使用了WSO2 ESB 5.0。我使用了两个肥皂端点来获得响应。下面提到代理服务代码。

 <?xml version="1.0" encoding="UTF-8"?>
<inSequence xmlns="http://ws.apache.org/ns/synapse">
    <log/>
    <property expression="//sam:getCertificateID/sam:vehicleNumber"
        name="getVehicleNo" scope="default" type="STRING" xmlns:sam="http://sample.esb.org"/>
    <log>
        <property expression="get-property('default','getVehicleNo')" name="VehicleNo"/>
    </log>
    <call>
        <endpoint>
            <wsdl port="EmissionTestServiceHttpSoap11Endpoint"
                service="EmissionTestService" uri="http://172.17.0.1:9763/services/EmissionTestService?wsdl"/>
        </endpoint>
    </call>
    <property expression="//ns:getCertificateIDResponse/ns:return"
        name="getCertificateIDResponse" scope="default" type="STRING" xmlns:ns="http://sample.esb.org"/>
    <log>
        <property
            expression="get-property('default','getCertificateIDResponse')" name="CertificateID"/>
    </log>
    <payloadFactory media-type="xml">
        <format>
            <soapenv:Envelope xmlns:sam="http://sample.esb.org" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
                <soapenv:Header/>
                <soapenv:Body>
                    <sam:getPolicyID>
                        <sam:vehicleNumber>$1</sam:vehicleNumber>
                    </sam:getPolicyID>
                </soapenv:Body>
            </soapenv:Envelope>
        </format>
        <args>
            <arg evaluator="xml" expression="get-property('default','getVehicleNo')"/>
        </args>
    </payloadFactory>
    <log/>
    <property name="messageType" scope="axis2" type="STRING" value="application/soap+xml"/>
    <call>
        <endpoint>
            <wsdl port="InsuranceServiceHttpSoap11Endpoint"
                service="InsuranceService" uri="http://172.17.0.1:9763/services/InsuranceService?wsdl"/>
        </endpoint>
    </call>
    <property expression="//ns:getPolicyIDResponse/ns:return"
        name="getPolicyIDResponse" scope="default" type="STRING" xmlns:ns="http://sample.esb.org"/>
    <log>
        <property
            expression="get-property('default','getPolicyIDResponse')" name="PolicyID"/>
    </log>
</inSequence>

第一个端点工作正常,并提供了特定的日志消息。但是,当呼叫第二个端点时,会出现以下错误消息。

Caused by: org.apache.axiom.soap.SOAPProcessingException: First Element must contain the local name, Envelope , but found faultstring
    at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.constructNode(StAXSOAPModelBuilder.java:305)
    at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createOMElement(StAXSOAPModelBuilder.java:252)
    at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createNextOMElement(StAXSOAPModelBuilder.java:234)
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:249)
    at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:204)
    at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:154)
    at org.apache.axiom.om.impl.AbstractOMMetaFactory.createStAXSOAPModelBuilder(AbstractOMMetaFactory.java:73)
    at org.apache.axiom.om.impl.AbstractOMMetaFactory.createSOAPModelBuilder(AbstractOMMetaFactory.java:79)
    at org.apache.axiom.om.OMXMLBuilderFactory.createSOAPModelBuilder(OMXMLBuilderFactory.java:196)
    at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:65)
    at org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:148)
    at org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:137)
    ... 14 more

您能帮我解决这个问题吗?非常感谢您提供任何帮助或解决方法。

1 个答案:

答案 0 :(得分:0)

您的端点未返回肥皂包。如果将'configure-> logging-> apache.synapse.tranport.http.wire'设置为'debug',您会看到发生了什么。

由于端点未返回SOAP,但可能是普通的旧XML,因此您可以尝试设置

<property name="messageType" value="application/xml" scope="axis2"/>
<property name="ContentType" value="application/xml" scope="axis2"/>

在发送消息之前。