正如Tishan提到的,您可以使用$header
突變xpath變量來訪問消息上下文中的肥皂標題。但是對於xslt mediator來說這有點棘手。您不能直接訪問xslt樣式表中的消息上下文值。但可以將這些值作爲參數傳遞並用於轉換。讓我們看看我們如何實現這一目標。
下面是account.xslt文件的外觀。請注意,有兩個參數叫PARAM_SSN
和PARAM_ACCT_NO
用於爲<ssn></ssn>
分配值和<accountNumber></accountNumber>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="PARAM_SSN"></xsl:param>
<xsl:param name="PARAM_ACCT_NO"></xsl:param>
<xsl:template match="/">
<account xmlns="http://services.samples">
<ssn>
<xsl:value-of select="$PARAM_SSN"></xsl:value-of>
</ssn>
<accountNumber>
<xsl:value-of select="$PARAM_ACCT_NO"></xsl:value-of>
</accountNumber>
<accountHolder>
<xsl:value-of select="//name"></xsl:value-of>
</accountHolder>
</account>
</xsl:template>
</xsl:stylesheet>
下
/_system/governance/transform/account.xslt
下一頁
上面保存在WSO2 ESB的註冊表文件是做轉型與帳戶樣品代理.xslt
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="TransformExample"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<xslt key="gov:/transform/account.xslt">
<property name="PARAM_SSN" expression="$header/seccode"/>
<property name="PARAM_ACCT_NO" expression="$trp:acctNo"/>
</xslt>
<log level="custom">
<property name="Transformed Payload" expression="$body"/>
</log>
</inSequence>
<outSequence>
<send/>
</outSequence>
</target>
<description/>
</proxy>
在這裏你可以看到裏面<xslt>
調解員,我傳遞值TW o參數通過訪問消息上下文在xslt中定義。 PARAM_SSN
的值取自肥皂標題,PARAM_ACCT_NO
的值取自傳輸標題。這個由soapUI調用的代理服務具有低於有效負載。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<seccode>987654321</seccode>
</soapenv:Header>
<soapenv:Body>
<request>
<name>Indika Sampath</name>
</request>
</soapenv:Body>
</soapenv:Envelope>
另外我發送acctNo
作爲傳輸標題與請求一起。一旦命中代理,您可以在控制檯中看到如下所示的轉換輸出日誌。
[2016-01-09 07:19:02,146] INFO - LogMediator Transformed Payload = <soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<account xmlns="http://services.samples"><ssn>987654321</ssn><accountNumber>123456789</accountNumber><accountHolder>Indika Sampath</accountHolder></account>
</soapenv:Body>
希望這可以解決您的問題。
乾杯!
在一定程度上解決問題,在我的情況下,我需要傳遞的不僅僅是價值,還有一個列表。我寧願傳遞完整的XML作爲參數,但不支持:( –