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

Payload parsing error (Soap 1.1 vs Soap 1.2)

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

当我发送 SOAP 1.1 消息时,我的终结点正确应答。

我制作了一个接受参数并将其转换为 SOAP 的代理。然后通过我的端点发送它。

问题是我的消息格式正确(我认为是这样)但我总是有这个错误:

ERROR - RelayUtils Error while building Passthrough stream org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] Message: Content is not allowed in prolog.

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

我的代理定义是这样的:

<?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="" >
                                    </value>
                                </Gender>  
                                <BirthDate>
                                    <value xsi:type="TS" specializationType="TS.FULLDATE" value=""/>
                                </BirthDate>
                                <Name>
                                    <value>
                                        <given qualifier="IN"></given>
                                            <family></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>

非常感谢您的帮助。

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

关闭 ESB 实例。 找到位于 $ESB_HOME/repository/conf 目录下的 log4j.properties 文件并取消注释以下行

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

然后将 ESB 控制台日志粘贴到此处。您可能会在那里看到 ContentType header。

此外,符号“>>”给出写入 ESB 的内容,“<<”给出从 ESB 写入的内容。