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"/>