如果请求主体中不存在该属性,是否可以为该属性调解器设置默认值?

时间:2019-03-26 13:51:01

标签: wso2 wso2esb wso2ei synapse

我正在WSO2 EI / ESB中构建一个简单的API。我将每个请求参数保存到如下属性:

<property expression="json-eval($.client_id)" name="client_id" scope="default" type="STRING"/>

然后使用有效负载工厂构建有效负载:

<payloadFactory media-type="json">
                <format>       
                    {

                        "req_type": "1",
                        "client_id": $1

                    }
                </format>
                <args>
                    <arg evaluator="xml" expression="get-property('client_id')"/>
                </args>
</payloadFactory>

但是,如果我发送了一条空消息{}(没有client_id),则$ 1参数中不会放置任何内容,并且所得的有效载荷将无效:

{
                    "req_type": "1",
                    "client_id:
}

我想知道的是,是否有一种在属性调解器中保存此表达式时设置默认值的方法?例如: <property expression="json-eval($.client_id)" name="client_id" scope="default" type="STRING" defaultValue="0"/>或类似的东西。

我知道我可以实现过滤器来检查该字段是否存在并对其进行验证,但是我发现该字段可能会变得有些混乱。

3 个答案:

答案 0 :(得分:2)

不,您不能使用有效负载工厂。您必须从不同的解决方案中进行选择:

  • 用XSLT转换替换您的有效负载工厂,这种转换更加灵活(最佳解决方案)
  • 添加过滤器以构建参数并设置默认值
  • 使用脚本中介程序替换痛苦的过滤器,并能够轻松管理if / then / else语句。然后,您可以从脚本中介器初始化属性。

答案 1 :(得分:0)

我认为没有办法做到这一点。您将不得不使用过滤器。

答案 2 :(得分:0)

有条件的xpath? 这可能有效。试一下下面的代码。

<enrich>
    <source clone="true" type="custom" xpath="0"  />
    <target action="replace" type="custom" xpath="" property="boolean(string-length(//client_id) != 0)" />
</enrich>