如果请求正文中不存在 属性,是否可以为 属性 中介设置默认值?
Is there a way to set a default value for a property mediator if the property does not exist in the request body?
我正在 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":
}
</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"/>
或类似的东西。
我知道我可以实施过滤器来检查字段是否存在并验证它,但我发现这可能会变得有点混乱。
我认为没有办法做到这一点。您将不得不使用过滤器。
不,您不能使用 payloadFactory。您必须从不同的解决方案中进行选择:
- 用更灵活的 XSLT 转换替换您的 payloadFactory(最佳解决方案)
- 添加过滤器以构建您的参数并设置默认值
- 使用脚本调解器来替换痛苦的过滤器,并能够轻松管理 if/then/else 语句。然后您可以从脚本中介初始化 属性。
条件 xpath ?
这可能有效。尝试下面的代码。
<enrich>
<source clone="true" type="custom" xpath="0" />
<target action="replace" type="custom" xpath="" property="boolean(string-length(//client_id) != 0)" />
</enrich>
我正在 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":
}
</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"/>
或类似的东西。
我知道我可以实施过滤器来检查字段是否存在并验证它,但我发现这可能会变得有点混乱。
我认为没有办法做到这一点。您将不得不使用过滤器。
不,您不能使用 payloadFactory。您必须从不同的解决方案中进行选择:
- 用更灵活的 XSLT 转换替换您的 payloadFactory(最佳解决方案)
- 添加过滤器以构建您的参数并设置默认值
- 使用脚本调解器来替换痛苦的过滤器,并能够轻松管理 if/then/else 语句。然后您可以从脚本中介初始化 属性。
条件 xpath ? 这可能有效。尝试下面的代码。
<enrich>
<source clone="true" type="custom" xpath="0" />
<target action="replace" type="custom" xpath="" property="boolean(string-length(//client_id) != 0)" />
</enrich>