我正在探索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>
請添加您已經嘗試對這個問題的代碼。考慮閱讀此:http://stackoverflow.com/help/how-to-ask – Aaron
你可以發佈你正在使用的交易,包括頭和你的代理服務配置? – jchaplin
添加您的esb代理配置xml ... –