2017-02-15 73 views
0

我正在探索WSO2 ESB並遇到問題。我正在使用一個簡單的通過代理來發布SAP(或郵差,測試)的XML數據,然後將其轉發到REST API - 應該很容易!WSO2 ESB - 自動添加的肥皂信封導致問題

發帖時直接向REST API(不通過ESB),它工作正常。(200,OK)

但是WSO2 ESB被自動添加一個SOAP信封,裏面的REST API不會接受。我試過各種方法來刪除自動添加的SOAP信封,但沒有成功。嘗試XSLT轉換,POX格式,豐富中介等,我可以找到每一個建議。 (如果它作爲身體的一部分被髮送我可以刪除使用XSLT包絡元件,但不是一個WSO2增加在)

我可以訪問體,沒有SOAP信封,使用:

<property name="body" expression="$body/*[1]" type="OM"/> 

但不知道如何將其轉發給API。

任何想法如何阻止WSO2 ESB中首先添加的信封,或者如何刪除它?

我使用了this答案的xslt代碼,當我將SOAP標籤包含在主體中時它可以正常工作,但對似乎在WSO2中自動添加的SOAP信封沒有影響(除了給出錯誤, )。

我試圖線的不同變體:

<xsl:apply-templates select="soap:Envelope/soap:Body/*"/> 

<xsl:apply-templates select="soap:Envelope/*"/> 
<xsl:apply-templates select="/*"/> 

這是一個錯誤我在ESB日誌中看到:

無法使用以執行XSLT轉換:Value {name ='null',keyValue ='discountPayment'}對源XPath:s11:Body/child :: [position()= 1] | S12:身體/子:: [位置()= 1]原因:無法使用XSLT結果創​​建的OMElement

我非常新的WSO2 ESB,以前沒有使用XSLT,所以可能會出現一些非常在我的方法基本的錯誤....

這裏是我的代理XML和XSLT的 「removeSOAP」:

<?xml version="1.0" encoding="UTF-8"?> 
 
<proxy name="APIServer" startOnLoad="true" trace="disable" 
 
    transports="https http" xmlns="http://ws.apache.org/ns/synapse"> 
 
    <target> 
 
    <inSequence> 
 
     <log level="full"> 
 
     <property name="FirstLog" value="APITest LOG...."/> 
 
     <property name="payload" expression="$body/*[1]" type="OM"/> 
 
     </log> 
 
     <xslt key="removeSOAP"/>    
 
     <log level="full"> 
 
     <property name="SecondLog" value="after xslt...."/> 
 
     </log> 
 
    <property name="messageType" scope="axis2" type="STRING" value="application/xml"/> 
 
      <send>  
 
      <endpoint name="endpoint_urn_uuid_xxxxxx"> 
 
     <address trace="disable" uri="http://myAPIendpoint " /> 
 
    </endpoint> 
 
       </send> 
 
    </inSequence> 
 
    <outSequence> 
 
     <log level="full"/> 
 
     <send/> 
 
    </outSequence> 
 
    <faultSequence/> 
 
    </target> 
 
</proxy>

<?xml version="1.0" encoding="UTF-8"?> 
 
<localEntry key="removeSOAP" xmlns="http://ws.apache.org/ns/synapse"> 
 
<xsl:stylesheet version="1.0" 
 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
 
    xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
 
    xmlns:m="http://www.example.org/stock"> 
 
    <xsl:template match="/"> 
 
     <xsl:apply-templates select="soap:Envelope/soap:Body/*"/> 
 
    </xsl:template> 
 
    <xsl:template match="@*|node()"> 
 
     <xsl:copy> 
 
      <xsl:apply-templates select="@*|node()"/> 
 
     </xsl:copy> 
 
    </xsl:template> 
 
</xsl:stylesheet> 
 
</localEntry>

+0

請添加您已經嘗試對這個問題的代碼。考慮閱讀此:http://stackoverflow.com/help/how-to-ask – Aaron

+0

你可以發佈你正在使用的交易,包括頭和你的代理服務配置? – jchaplin

+0

添加您的esb代理配置xml ... –

回答

0

一位同事想通了這一點,我今天在這裏發表了答案櫃面它可以幫助別人的未來:

在代理服務

,前送,添加行

<property name="DISABLE_CHUNKING" value="true" scope="axis2"/> 

那麼它的工作。

不需要上面顯示的XSLT轉換,只是這條線修復了它。