Я пытаюсь перехватить вызов веб-службы, чтобы изменить учетные данные пользователя веб-службы (токен имени пользователя и пароль) с помощью 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>
Это преобразование :
<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">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>
Объяснение : Выбор Имен, когда элементы находятся в пространстве имен по умолчанию, является FAQ. Найдите в тегах xpath и xslt «пространство имен по умолчанию».