изменить имя пользователя и пароль мыльного сообщения с помощью xsl для службы Siebel

Я пытаюсь перехватить вызов веб-службы, чтобы изменить учетные данные пользователя веб-службы (токен имени пользователя и пароль) с помощью xsl.

Вызов SO похож на клиент -> Перехватчик (изменение учетных данных пользователя) + любые другие изменения -> Вызов оригинальной веб-службы oracle ERP/Siebel.

Это должно быть сделано через xsl ... Я пробовал разные варианты, но это не сработало ... Очень нужна помощь в этом ... обыскал множество сайтов, но не нашел правильного ответа.

Пример запроса веб-сервиса приведен ниже:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cus="http://siebel.com/CustomUI" >
    <soapenv:Header>
        <UsernameToken xmlns="http://siebel.com/webservices">Bill</UsernameToken>
    <PasswordText xmlns="http://siebel.com/webservices">Gates</PasswordText>            
         <SessionType xmlns="http://siebel.com/webservices">None</SessionType>
    </soapenv:Header>
<soapenv:Body>
      <cus:SiebelService>
         <a>testvalue1</a>
         <b>testvalue2</b>
      </cus:SiebelService>
</soapenv:Body>
</soapenv:Envelope>

Это должно быть преобразовано с помощью xsl, чтобы получить следующий результат:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cus="http://siebel.com/CustomUI" >
<soapenv:Header>
            <UsernameToken xmlns="http://siebel.com/webservices">Steve</UsernameToken>
            <PasswordText xmlns="http://siebel.com/webservices">Balmer</PasswordText>           
             <SessionType xmlns="http://siebel.com/webservices">None</SessionType>
</soapenv:Header>
<soapenv:Body>
      <cus:SiebelService>
         <a>testvalue1</a>
         <b>testvalue2</b>
      </cus:SiebelService>
</soapenv:Body>
</soapenv:Envelope>

person technoroads    schedule 08.05.2011    source источник
comment
Хороший вопрос, +1. Смотрите мой ответ для полного, короткого и простого решения.   -  person Dimitre Novatchev    schedule 09.05.2011


Ответы (1)


Это преобразование:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:x="http://siebel.com/webservices">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

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

 <xsl:template match="x:UsernameToken/text()">Steve</xsl:template>
 <xsl:template match="x:PasswordText/text()">Ballmer</xsl:template>
</xsl:stylesheet>

при применении к предоставленному XML-документу:

<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cus="http://siebel.com/CustomUI" >
    <soapenv:Header>
        <UsernameToken
        xmlns="http://siebel.com/webservices">Bill</UsernameToken>
        <PasswordText
        xmlns="http://siebel.com/webservices">Gates</PasswordText>
        <SessionType
        xmlns="http://siebel.com/webservices">None</SessionType>
    </soapenv:Header>
    <soapenv:Body>
        <cus:SiebelService>
            <a>testvalue1</a>
            <b>testvalue2</b>
        </cus:SiebelService>
    </soapenv:Body>
</soapenv:Envelope>

дает желаемый результат:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:cus="http://siebel.com/CustomUI">
   <soapenv:Header>
      <UsernameToken xmlns="http://siebel.com/webservices">Steve</UsernameToken>
      <PasswordText xmlns="http://siebel.com/webservices">Ballmer</PasswordText>
      <SessionType xmlns="http://siebel.com/webservices">None</SessionType>
   </soapenv:Header>
   <soapenv:Body>
      <cus:SiebelService>
         <a>testvalue1</a>
         <b>testvalue2</b>
      </cus:SiebelService>
   </soapenv:Body>
</soapenv:Envelope>

Объяснение. Выбор имен элементов, находящихся в пространстве имен по умолчанию, является часто задаваемым вопросом. Найдите теги xpath и xslt для «пространства имен по умолчанию».

person Dimitre Novatchev    schedule 08.05.2011