2016-01-07 4 views
0

надеюсь, кто-то может указать на ослепительно очевидное для меня - я хочу выполнить несколько простых переводов на мыльной полезной нагрузке, прежде чем отправлять на бэкэнд-сервис - в решающей степени мне нужен доступ ко всем мыло- которые поставляются в исходной полезной нагрузке. Мое наивное (?) Мышление состояло в том, чтобы просто установить атрибут источника для медиатора <xslt> на «/», поскольку Im знает по умолчанию, он начнется с первого дочернего элемента <body>, и мне действительно нужен доступ к заголовкам. WSO2 возвращает «Оценка выражения XPath/не приводит к ошибке OMNode».WSI2 XSLT Mediator не разрешает xpath

Есть ли одна или несколько взаимосвязанных особенностей взаимодействия с WSO2/xpath, которые Ive пропустил в литературе? Любые указатели с благодарностью получены, спасибо

ответ

0

Вы можете получить доступ к заголовкам SOAP с использованием заголовка Synapse Xpath Variable $ в исходном xpath (например: $ header/wsa: To).
Надеюсь, что это поможет!

1

Как упоминалось в 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!

+0

Решает проблему в некоторой степени, в моем случае мне нужно передать больше, чем просто значение, есть список. Я предпочитаю передавать полный XML в качестве параметра, но это не поддерживается :( –