WSO2 esb中参数的定制/隐藏
我有如下参数的服务WSO2 esb中参数的定制/隐藏,wso2,wso2esb,Wso2,Wso2esb,我有如下参数的服务 > <book category="cooking"> > <title lang="en">Everyday Italian</title> > <author>Giada De Laurentiis</author> <year>2005</year> > <price>30.00</price> </book> > >日常意大
> <book category="cooking">
> <title lang="en">Everyday Italian</title>
> <author>Giada De Laurentiis</author> <year>2005</year>
> <price>30.00</price> </book>
>
>日常意大利语
>贾达德劳伦蒂斯2005
> 30.00
现在我想隐藏参数,我希望我的客户端只看到
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
</book>
日常意大利语
吉娅达·德·劳伦蒂斯
2005
如何在WSO2 ESB中实现这一点。
任何帮助都会非常有用。有几种方法可以实现这一点。您可以使用负载中介器,通过xslt转换它,在脚本中介器中执行它,等等。我认为对于您的情况,我会使用负载中介器或xslt。完成有效负载/xslt后,可以将转换后的有效负载发送回调用者。您可以在wso2页面上找到许多示例 e、 这里
希望这会有所帮助。我假设您想向客户或消费者隐藏一些参数,这样他们就不必在请求中传递这些参数。例如,案例中的“价格”元素 好的,您可以使用适当的wsdl文件将代理创建为基于wsdl的代理,这样在请求或相应的复杂类型中就不会有“price”元素。现在,客户机将无法在请求中看到“price”元素,因为您正在描述没有“price”元素的WSDL契约
希望有帮助:)使用JS中介,您可以做到:
<payloadFactory media-type="xml">
<format>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
</format>
<args/>
</payloadFactory>
<log level="full"/>
<script language="js"><![CDATA[
var msg = mc.getPayloadXML();
mc.setPayloadXML(
<book category="cooking">
<title lang="en">{msg..*::title}</title>
<author>{msg..*::author}</author>
<year>{msg..*::year}</year>
</book>
);
]]>
</script>
<log level="full"/>
日常意大利语
贾达德劳伦蒂斯
2005
30
{msg..*::title}
{msg..*::author}
{msg..*::year}
);
]]>
上面的payloadFactory中介只是为了定义您在问题中提出的XML
此外,您还可以使用payloadFactory中介:
<payloadFactory media-type="xml">
<format>
<book category="cooking">
<title lang="en">$1</title>
<author>$2</author>
<year>$3</year>
</book>
</format>
<args>
<arg evaluator="xml" expression="//book/title/text()"/>
<arg evaluator="xml" expression="//book/author/text()"/>
<arg evaluator="xml" expression="//book/year/text()"/>
</args>
</payloadFactory>
$1
$2
$3
最后,对于XSLT方法,您可以在synapse配置中定义一个本地条目文件:
<?xml version="1.0" encoding="UTF-8"?>
<localEntry key="xsltToTransform" xmlns="http://ws.apache.org/ns/synapse">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="price"/>
</xsl:stylesheet>
</localEntry>
然后,在中介序列中,只需调用已定义的本地条目
<xslt key="xsltToTransform"/>
谢谢Martin Hald。你能说得更具体一点吗,我是WSO2 ESB的新手,我已经尝试了将近两周,试图找到解决方案。我的要求非常简单,我有一些web服务,每个服务都有10到12个以上的参数,我想隐藏它们,我希望我的服务消费者只看到很少的参数。亲爱的Praveen,我希望价格应该是硬编码的,客户不应该知道“价格”的价值,客户端必须将所有参数传递给SOAP消息,但很少有参数将从客户端填充,其他参数将自动填充或硬编码客户端将看不到。在ESB之前,我曾为此类需求编写包装服务,但我已切换到ESB,我正在寻找解决方案,但未能实现这一点。谢谢