简体   繁体   English

通过使用丰富的调解器动态添加新元素到 WSO2 EI 中的 json 有效负载

[英]Dynamically add new element to json payload in WSO2 EI by using enrich mediator

I need to enrich existing json payload with new elements which is dynamically passed to existing payload instead of static value .我需要使用动态传递给现有有效负载而不是 static 值的新元素来丰富现有的 json 有效负载 Can anyone please help me?谁能帮帮我吗?

Existing payload:现有有效载荷:

{
  "Type":"CAR",
  "Identifier":"2db23c39-9d3f-4e61-b3c5-e8725a2f1b90",
  "ListingType":"New",
  "SaleStatus":"For Sale"
}

Expected:预期的:

{
  "Type":"CAR",
  "Identifier":"2db23c39-9d3f-4e61-b3c5-e8725a2f1b90",
  "ListingType":"New",
  "SaleStatus":"For Sale",
  "messageId":"urn:uuid:ccdafb72-c4"
}

Here messageId is ESB generated MessageID automatically.这里的 messageId 是 ESB 自动生成的 MessageID。

 <!-- ************API Request set to incomingRequest property************ -->
 <property description="incomingRequest" expression="json-eval($.)" name="incomingRequest" 
 scope="default" type="STRING"/>
<payloadFactory media-type="json">
    <format>$1</format>
    <args>
        <arg evaluator="xml" expression="get-property('incomingRequest')"/>
    </args>
</payloadFactory>
<enrich description="">
    <source type="inline" clone="true">
        <messageId xmlns="">evaluate(get-property('operation','messageId')) 
  </messageId>
    </source>
    <target action="child" xpath="//jsonObject" />
</enrich>
<enrich>
    <source clone="true" xpath="//jsonObject" />
    <target type="body" />
</enrich>
 <log level="full"/>

**Getting Wrong output** 

{
  "Type":"CAR",
  "Identifier":"2db23c39-9d3f-4e61-b3c5-e8725a2f1b90",
  "ListingType":"New",
  "SaleStatus":"For Sale",
  "messageId": "evaluate(get-property('operation','messageId'))"
}

Note: I have followed this注意:我遵循了这个

Inline content on the enrich mediator is not evaluated.不评估丰富介体上的内联内容。 (considered as string) So, we can use the property mediator to evaluate the expression. (视为字符串)因此,我们可以使用属性中介器来评估表达式。

<property name="prop1" expression="get-property('operation','messageId')"/>

Then we can use the above property in enrich mediator.然后我们可以在丰富中介者中使用上述属性。

<enrich description="">
    <source type="property" property="prop1"></source>
    <target action="child" xpath="//jsonObject" />
</enrich>

BTW, In latest product versions, the Enrich mediator has the native JSON support.顺便说一句,在最新的产品版本中,Enrich 调解器具有原生 JSON 支持。 More details in Here更多细节在这里

I had similar scenario where i wanted to append some elements to a received json response:我有类似的情况,我想 append 一些元素到收到的 json 响应:

  • First i got the response received into a property: property expression="json-eval($)" name="RESPONSE" scope="default" type="STRING"首先我收到了一个属性的响应: property expression="json-eval($)" name="RESPONSE" scope="default" type="STRING"

  • Then i created a payload and added the new properties:然后我创建了一个有效负载并添加了新属性:

 <payloadFactory media-type="json">
                           <format>
                                {"details": $1,
                                "timestamp":"$2",
                                "value":"$3"}
                            </format>
                            <args>
                                <arg evaluator="xml"
                                    expression="get-property('RESPONSE')" />
                                <arg evaluator="xml"
                                    expression="get-property('REQUEST_TIMESTAMP')" />
                                <arg evaluator="xml"
                                    expression="get-property('VALUE')" />
                            </args>
                        </payloadFactory>

Then I returned the response using loopback.然后我使用环回返回响应。 Note that REQUEST_TIMESTAMP and VALUE are defined as properties.请注意,REQUEST_TIMESTAMP 和 VALUE 被定义为属性。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM