使用 属性 Mediator 如何获得 json 属性?

How to get json property when I use the Property Mediator?

我使用 属性 Mediator 获取注册表资源,它 returns 我是一个 json 字符串,但是我如何才能在 json 字符串? 我的代码示例:

test-file.json like so
{
    "mappings": {
        "mapping": {
            "ep_1": "http://localhost:8280/services/ep_1",
            "ep_2": "http://localhost:8280/services/ep_2",
            "ep_3": "http://localhost:8280/services/ep_3"
        }
    }
}

我喜欢这样:


<property expression="get-property('registry','conf:customresource/test-file.json')" name="JsonContent" scope="default" type="STRING"/>
<property expression="????" name="endpointUrl" />

如何获取'endpointUrl'中的属性'ep_1'或者有没有其他方法获取属性'ep_1'?谢谢

试试下面的方法。

expression="json-eval($ctx:JsonContent.mappings.mapping.ep_1)"

如果上面的方法不起作用,试试这个。

expression="$ctx:JsonContent//mappings/mapping/ep_1"

您可以将 json 文件从注册表加载到有效载荷,并对有效载荷进行 json-eval。这是肮脏的解决方案,但它有效 ;):

<property expression="base64Decode(get-property('registry','conf:customresource/test-file.json'))" name="JsonContent" scope="default" type="STRING"/>
<payloadFactory description="Build Payload Response" media-type="json">
  <format></format>
  <args>
    <arg evaluator="xml" expression="$ctx:JsonContent" xmlns:payload="http://ws.apache.org/commons/ns/payload"/>
    </args>
</payloadFactory>
<property expression="json-eval($.mappings.mapping.ep_1)" name="endpointUrl" scope="default" type="STRING"/>

此致

我已经完成了这个 question.You 必须使用 XML 内容而不是 JSON,然后将内容设置到 属性 类型为 OM 的调解器中,并且您可以使用 xpath 表达式在 XML 内容中获取您想要的任何值。 代码示例

XML content:
<mappings>
    <mapping>
        <ep_1>http://localhost:8280/services/ep_1</ep_1>
        <ep_2>http://localhost:8280/services/ep_2</ep_2>
        <ep_3>http://localhost:8280/services/ep_3</ep_3>
    </mapping>
</mappings>
<property expression="get-property('registry','conf:customresource/test-file.xml')" name="XmlContent" scope="default" type="OM"/>
<property expression="$ctx:XmlContent/mapping/ep_1" name="endpointUrl" />

之后,该值将被设置到 属性 命名的 endpointUrl 中。 最后,请注意第二个属性 mediator的表达,如果你这样做,你会得到黑值$ctx:XmlContent/mappings/mapping/ep_1。希望对大家有帮助。