2016-09-20 4 views
-1

У меня есть входящее сообщение SOAP, в котором не было тэга заголовка SOAP. Мне нужно добавить заголовок SOAP. Я использую этот XSLT для этого, но SOAP HEADER не добавляется. XSLT:Добавление заголовка SOAP в конверте SOAP с использованием XSLT

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:dp="http://www.datapower.com/extensions" 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
extension-element-prefixes="dp" 
exclude-result-prefixes="dp" > 
    <xsl:variable name="uuid" select="dp:variable('var://context/txn/uuid')" /> 
<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="soapenv:Header"> 
    <soapenv:Header> 
     <UUID><xsl:value-of select="$uuid"/></UUID> 
    </soapenv:Header> 
</xsl:template> 
</xsl:stylesheet> 

данное входящее SOAP mesagge может иметь тег заголовка или он может не иметь заголовка тег

ввода сообщений SOAP Без заголовка тега:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <hmhs-medical-acknowledgement id="4080186649" result="FAIL""/> 
    </soapenv:Body> 
</soapenv:Envelope> 

ввода сообщений SOAP с заголовком тега:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header/>  
     <soapenv:Body> 
      <hmhs-medical-acknowledgement id="4080186649" result="FAIL""/> 
     </soapenv:Body> 
</soapenv:Envelope> 

Требуемый выход SOAP-сообщение:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header> 
<UUID>71A4B2FA029D412787B06E07685ED101</UUID> 
</soapenv:Header> 
    <soapenv:Body> 
     <hmhs-medical-acknowledgement id="4080186649" result="FAIL""/> 
    </soapenv:Body> 
</soapenv:Envelope> 

Может кто-нибудь помочь, как добавить в него заголовок SOAP.

+0

Пожалуйста, пост пример входного XML и ожидаемого результата. - ** Подсказка: ** если вход не имеет заголовка SOAP, тогда ваш второй шаблон никогда не будет выполнен. –

+0

Привет Майкл, ввода сообщений SOAP: Вывод сообщений SOAP: 71A4B2FA029D412787B06E07685ED101 user5458829

+0

Пожалуйста, не публикуйте код в комментариях - вместо этого измените свой вопрос. –

ответ

0

AFAICT, что вы хотите сделать:

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:dp="http://www.datapower.com/extensions" 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
extension-element-prefixes="dp"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:variable name="uuid" select="dp:variable('var://context/txn/uuid')" /> 

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="/soapenv:Envelope"> 
    <xsl:copy> 
     <soapenv:Header> 
      <UUID><xsl:value-of select="$uuid"/></UUID> 
     </soapenv:Header> 
     <xsl:apply-templates/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="soapenv:Header"/> 

</xsl:stylesheet> 
+0

Спасибо, Michael. Это решение работает нормально. У меня другая проблема, как некоторое время, я получаю пустой тег заголовка, например «». Поэтому в этом случае это не работает. Если не было тега < ", этот код работает. Как мы можем поставить conditonal check для «: присутствует тэг или нет, и на основании этого мы можем выбрать либо fortemplate match ="/soapenv: Envelope ", либо" template match = "/ soapenv: Header" вы можете помогите нам в этом, как мы можем это написать. – user5458829

+0

Измените свой вопрос и покажите пример ввода с пустым заголовком. –

+0

Привет, Майкл, я добавил два возможных входящего сообщения SOAP: это похоже на тег HEADER, а другой - без тега HEADER в сообщении SOAP. потребитель отправляет некоторое время HEADER-тегу, а когда-то он не приходит. я знаю, как я могу получить желаемый результат. – user5458829