Customization/Hiding WSO2 esb 中的参数
Customization/Hiding Of Parameters in WSO2 esb
我有采用以下参数的服务
> <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>
</book>
WSO2 ESB 怎么可能。
任何帮助都会很有帮助。
有几种方法可以实现这一点。您可以使用 payload mediator,通过 xslt 转换它,在脚本 mediator 中进行转换等。我认为对于您的情况,我会使用 payload mediator 或 xslt。完成 payload/xslt 后,您可以将转换后的有效负载发回给调用者。您可以在 wso2 页面上找到很多示例。
例如这里
https://docs.wso2.com/display/ESB481/PayloadFactory+Mediator
希望对您有所帮助。
我假设您想向客户或消费者隐藏一些参数,这样他们就不必将它们作为 请求 的一部分传递。例如,您的案例中的 "price" 元素。
好吧,您可以使用适当的 wsdl 文件将代理创建为 基于 wsdl 的代理,这样您就不会在请求中包含 "price" 元素,或者在各自的复杂类型中。现在,客户端将无法在请求中看到 "price" 元素,因为您描述的 WSDL 合同没有 "price" 元素。
希望对您有所帮助:)
有了 JS Mediator,您可以这样做:
<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"/>
上面的payloadFactory中介只是为了定义你在问题中提出的XML。
此外,您可以使用 payloadFactory 调解器:
<payloadFactory media-type="xml">
<format>
<book category="cooking">
<title lang="en"></title>
<author></author>
<year></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>
最后,对于 XSLT 方法,您可以在 synapse-config 中定义一个本地入口文件:
<?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"/>
我有采用以下参数的服务
> <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>
</book>
WSO2 ESB 怎么可能。 任何帮助都会很有帮助。
有几种方法可以实现这一点。您可以使用 payload mediator,通过 xslt 转换它,在脚本 mediator 中进行转换等。我认为对于您的情况,我会使用 payload mediator 或 xslt。完成 payload/xslt 后,您可以将转换后的有效负载发回给调用者。您可以在 wso2 页面上找到很多示例。
例如这里
https://docs.wso2.com/display/ESB481/PayloadFactory+Mediator
希望对您有所帮助。
我假设您想向客户或消费者隐藏一些参数,这样他们就不必将它们作为 请求 的一部分传递。例如,您的案例中的 "price" 元素。
好吧,您可以使用适当的 wsdl 文件将代理创建为 基于 wsdl 的代理,这样您就不会在请求中包含 "price" 元素,或者在各自的复杂类型中。现在,客户端将无法在请求中看到 "price" 元素,因为您描述的 WSDL 合同没有 "price" 元素。
希望对您有所帮助:)
有了 JS Mediator,您可以这样做:
<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"/>
上面的payloadFactory中介只是为了定义你在问题中提出的XML。
此外,您可以使用 payloadFactory 调解器:
<payloadFactory media-type="xml">
<format>
<book category="cooking">
<title lang="en"></title>
<author></author>
<year></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>
最后,对于 XSLT 方法,您可以在 synapse-config 中定义一个本地入口文件:
<?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"/>