Как упоминалось в Tishan, вы можете использовать переменную xapse xpath для использования в заголовках мыла в контексте сообщений. Но это немного сложно, когда дело доходит до посредника xslt. Вы не можете напрямую обращаться к значениям контекста сообщения внутри таблицы стилей 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>
Выше файл, сохраненный в реестре WSO2 ESB под /_system/governance/transform/account.xslt
Далее приведен пример прокси, который делают преобразование с учетом .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>
посредника, я передаю значение ТВта 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>
Надеюсь, это решит вашу проблему.
Cheers!
Решает проблему в некоторой степени, в моем случае мне нужно передать больше, чем просто значение, есть список. Я предпочитаю передавать полный XML в качестве параметра, но это не поддерживается :( –