如何在WSO2 ESB中的Message Context属性上执行JSONPath或XPATH表达式

时间:2017-04-11 14:52:13

标签: xpath wso2esb jsonpath

我正在尝试使用属性介体将Json对象设置为proerty,然后使用JSONPathXPATH访问它的值。

在这种情况下,首先我将JSON对象设置为OM类型属性。在那里,使用$ctx:parent/child pattern我可以访问这些值。但我无法在其上执行XPath表达式(例如:$ctx:metadataOM/suppliers[0])。

我尝试了各种方案,并且我注意到这可以通过将Json对象设置为Payload并对其执行JSONpath / XPath操作来完成。

  • 无论如何都要这样做?
  • 无论如何都要从json-eval
  • 访问消息上下文属性
  • 无论如何要在JSONPath方法或XPATH表达式上执行get-property / $ctx:吗?

注意:我正在寻找一个不使用Script medaitorClass Mediator的答案。

有效负载:

{ 
    "metadata":{ 
        "language":"en", 
        "customerCountry":"GB", 
        "client":"coolpal", 
        "suppliers" : ["supplier-a","supplier-b"], 
        "currency":"USD" 
    } 
}

API.xml

<inSequence>
    <property expression="//jsonObject/metadata" name="metadataOM" scope="default" type="OM"/>
    <property expression="//jsonObject/metadata" name="metadataSTR" scope="default" type="STRING"/>
    <log level="custom">
        <property expression="$ctx:metadataOM/suppliers" name="metadataOM-suppliers"/>
        <property expression="$ctx:metadataOM/suppliers[0]" name="metadataOM-suppliers"/>
        <property expression="json-eval($.metadataOM.suppliers)" name="eval-metadata-suppliers"/>
        <property expression="json-eval($.metadataSTR.suppliers)" name="eval-metadata-suppliers"/>
        <property expression="json-eval($ctx:metadataOM)" name="eval-metadata-suppliers"/>
    </log>
    <respond/>
</inSequence>
  • WSO2ESB版本:5.0.0

1 个答案:

答案 0 :(得分:1)

在Martin的帮助下(Thanx Martin!)和一些自学,我找到了答案。

一个原因是,当json转换为XML时,它看起来如下所示。

<metadata>
    <language>en</language>
    <customerCountry>GB</customerCountry>
    <client>coolpal</client>
    <suppliers>supplier-a</suppliers>
    <suppliers>supplier-b</suppliers>
    <currency>USD</currency>
</metadata>

然后我存储并加载了第一个供应商,如下所示。第二个原因是,我忘了供应商没有零索引。 :)

<property expression="/" name="metadataOM" scope="default" type="OM"/>

<log level="custom">
    <property expression="$ctx:metadataOM" name="metadataOM"/>
    <property expression="$ctx:metadataOM//jsonObject/metadata/suppliers[1]" name="metadataOM-supplier-1"/>
</log>