2015-06-18 62 views
0

我在WSO2 ESB上有一個有效負載有問題。有效負載解析錯誤(Soap 1.1 vs Soap 1.2)

當我發送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但即使我在端點定義的格式=「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="$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

看來ESB無法正確構建消息。請檢查您的內容類型標頭是text/xml還是application/xml。按如下所示啓用接線日誌。

擊落ESB實例。 找到文件駐留在$ ESB_HOME /庫/ conf目錄下的log4j.properties並取消以下行

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

然後粘貼在這裏ESB控制檯日誌。您可能會在那裏看到ContentType標題。

另外符號'>>'給出了寫入ESB的內容,'<'給出了從ESB寫出的內容。

+0

謝謝,我將能夠調試的問題,因爲如果我使用肥皂傳遞到SOAP UI中的終點,我得到了一個異常。我會隨時向您通報我的進展情況。 – JFPicard

+0

我會接受這個答案,因爲您允許我比較來自SOAPUI的有效載荷和WSO2有效載荷。我錯過了一個我添加的標題: JFPicard

相關問題