有效载荷解析错误(Soap 1.1 vs Soap 1.2)

时间:2015-06-18 20:10:42

标签: wso2 wso2esb

我在WSO2 ESB上遇到有效负载问题。

当我发送SOAP 1.1消息时,我的端点正确回答。

我创建了一个代理,它接受参数并将其转换为SOAP。然后通过我的终端发送它。

问题是我的消息是正确形成的(我想是这样)但我总是有这个错误:

  

错误 - 构建直通流时RelayUtils出错   org.apache.axiom.om.OMException:javax.xml.stream.XMLStreamException:   [row,col]处的ParseError:[1,1]消息:不允许使用内容   序言

如果我在Slashdot:WSO2 ESB Content is not allowed in prolog exception in a OutSecuence上检查这个似乎可能是某种类型的内容类型错误,但即使我在我的端点中定义format =“soap11”,似乎信封是SOAP 1.2 < / p>

我的代理定义是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="Test11"
       transports="https,http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <payloadFactory media-type="xml">
            <format>
                <ns2:QueryReqWS xmlns:ns2="http://hiddenUrl.com/">
                <TOTO xmlns="urn:hl7-org:v3" 
                    ITSVersion="XML_1.0" 
                    xmlns:mif="urn:hl7-org:v3/mif" 
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                    xsi:schemaLocation="urn:hl7-org:v3 urn:hl7-org:v3 file:/schemas/TOTO.xsd">

                    <id root="1234"/>
                     ...
                    <controlActEvent classCode="CACT" moodCode="EVN">
                       ...
                        <queryByParameter>
                            <queryId root="456"/>
                            <responseModalityCode code="R"/>
                            <parameterList>
                                <Gender>
                                    <value code="$1" >
                                    </value>
                                </Gender>  
                                <BirthDate>
                                    <value xsi:type="TS" specializationType="TS.FULLDATE" value="$2"/>
                                </BirthDate>
                                <Name>
                                    <value>
                                        <given qualifier="IN">$3</given>
                                            <family>$4</family>
                                    </value>
                                </Name>
                            </parameterList>
                        </queryByParameter>
                    </controlActEvent>
                </TOTO>
                </ns2:QueryReqWS>
            </format>
            <args>
               <arg xmlns:ns2="http://hiddenUrl.com/"
                    evaluator="xml"
                    expression="string(//ns2:testRequest/ns2:person/ns2:gender)"/>
               <arg xmlns:ns2="http://hiddenUrl.com/"
                    evaluator="xml"
                    expression="string(//ns2:testRequest/ns2:person/ns2:birthday)"/>
               <arg xmlns:ns2="http://hiddenUrl.com/"
                    evaluator="xml"
                    expression="string(//ns2:testRequest/ns2:person/ns2:lastname)"/>
               <arg xmlns:ns2="http://hiddenUrl.com/"
                    evaluator="xml"
                    expression="string(//ns2:testRequest/ns2:person/ns2:firstname)"/>
            </args>
         </payloadFactory>
         <log level="full"/>
      </inSequence>
      <outSequence>
         <log level="full"/>
         <send/>
      </outSequence>
      <faultSequence/>
      <endpoint>
         <address uri="http:/test/testMessage/Unknown" format="soap11">
      </endpoint>
   </target>
   <description/>
</proxy>

示例消息如下:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
   <soap:Body>
    <ns2:testRequest xmlns:ns2="http://com.hiddenurl/">
    <ns2:person>
    <ns2:gender>M</ns2:gender>
    <ns2:lastname>Man</ns2:lastname>
    <ns2:firstname>Spider</ns2:firstname>
    <ns2:birthday>20150301</ns2:birthday>
    </ns2:person>
    </ns2:testRequest>
   </soap:Body>
</soap:Envelope>

Soap 1.1示例消息:                         

    <id root="1234"/>
     ...
    <controlActEvent classCode="CACT" moodCode="EVN">
       ...
        <queryByParameter>
            <queryId root="456"/>
            <responseModalityCode code="R"/>
            <parameterList>
                <BirthDate>
                    <value xsi:type="TS" specializationType="TS.FULLDATE" value="20150301"/>
                </BirthDate>
                <Gender>
                    <value code="M" >
                    </value>
                </Gender>    
                <Name>
                    <value>
                        <given qualifier="IN">Spider</given>
                            <family>Man</family>
                    </value>
                </Name>
            </parameterList>
        </queryByParameter>
    </controlActEvent>
</TOTO>
</ns2:QueryReqWS>
</soapenv:Body>
</soapenv:Envelope>

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

似乎ESB无法正确构建消息。请检查您的内容类型标头是text / xml还是application / xml。启用wirelog如下。

击落ESB实例。 找到log4j.properties文件驻留在$ ESB_HOME / repository / conf目录下并取消注释以下行

log4j.logger.org.apache.synapse.transport.http.wire=DEBUG

然后在此处粘贴ESB控制台日志。您可以在那里看到ContentType标题。

还有符号&#39;&gt;&gt;&#39;给出写入ESB的内容和&#39;&lt;&lt;&lt;&lt;&lt;&#给出了ESB写的内容。