使用 属性 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。希望对大家有帮助。
我使用 属性 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。希望对大家有帮助。