/ / Mule ESB: Nemôže dostať MEL na prístup k poľu - mula, esb, užitočné zaťaženie, mel

Mule ESB: Nemožno získať MEL na prístup k poľu - mule, esb, payload, mel

Mám nasledujúci tok, ktorý prijíma objekt JSON z http, potom konvertuje objekt JSON na štandardný objekt a potom vykoná CHOICE na objekte.

Nižšie je prietok:

<?xml version="1.0" encoding="utf-8"?>
<mule xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:json="http://www.mulesoft.org/schema/mule/json" version="EE-3.5.0" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:core="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
<json:object-to-json-transformer name="Object_to_JSON" doc:name="Object to JSON"/>
<flow doc:name="HelloWorldFlow1" name="HelloWorldFlow1">
<http:inbound-endpoint doc:description="This endpoint receives an HTTP message." doc:name="HTTP" exchange-pattern="request-response" host="localhost" port="8081" contentType="application/json"/>
<json:json-to-object-transformer doc:name="JSON to Object"/>
<choice doc:name="Choice-Determine-Route" tracking:enable-default-events="true">
<when expression="#[payload.uid == "ABC"]">
<set-payload value="#["When ABC case"]" doc:name="Set Payload"/>
</when>
<otherwise>
<set-payload value="#["Default case, payload:  " + payload + ", payload.uid: " + payload.uid]" doc:name="Set Payload"/>
</otherwise>
</choice>
</flow>
</mule>

Nižšie je test prietoku

C:curl>type input2.txt
{ "uid" : "ABC" }

C:curl>curl -H "Content-Type: application/json" -i -d @input2.txt http://localh
ost:8081
Content-Type: application/json

Default case, payload:  {"uid":"ABC"}, payload.uid: null

Takže aj keď môj input2.txt obsahoval:

{ "uid" : "ABC" }

Nemohol som dostať nasledujúci výraz úspešne spustiť

#[payload.uid == "ABC"]

Teraz si všimnite výraz Set Payload

#["Default case, payload:  " + payload + ", payload.uid: " + payload.uid]

... a čo uviedla:

Default case, payload:  {"uid":"ABC"}, payload.uid: null

Nezdá sa teda, že by rozpoznal payload.uid

Ako by som to mal uviesť v MEL?

Vďaka

odpovede:

2 pre odpoveď č. 1

Pretože ste nadefinovali returnClass atribút, štandardne vráti inštanciu org.mule.module.json.JsonData - http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/module/json/JsonData.html

V takom prípade musíte použiť:

when expression="#[payload.get("UID") == "ABC"]"

Ak namiesto toho nastavíte transformátor, aby vrátil mapu alebo objekt s poľom uid, môžete ho navigovať pomocou. notácia, ktorú ste vyskúšali.

Takže, aby sa váš výraz použil:

<json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>