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,我正在寻找解决方案,但未能实现这一点。谢谢