我正在尝试拦截Web服务调用,以使用xsl更改Web服务的用户凭据(用户名令牌和密码)。
SO 调用就像客户端 --> 拦截器(更改用户凭据)+ 任何其他更改 -->调用原始 oracle ERP/Siebel Web 服务。
这是通过xsl完成的...我尝试了各种选项,但没有用...非常需要这方面的帮助...搜索了很多网站,但找不到正确的答案。
下面给出了 Web 服务请求的示例:
<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">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>
说明:选择名称 wose 元素位于默认命名空间中是一个常见问题解答。在 xpath 和 xslt 标记中搜索"默认命名空间"。