/ / Mule ESB: Comment utiliser une exécution de flux conditionnelle à un objet JSON - json, conditionnel, mule, esb

Mule ESB: Comment utiliser une exécution de flux conditionnelle à un objet JSON - json, conditionnel, mule, esb

Mule ESB

J'essaie de convertir un programme Hello World en un programme qui acceptera un objet JSON, examinera les données et acheminera l'exécution en conséquence.

Voici une copie de mon flux:

<?xml version="1.0" encoding="utf-8"?>
<mule 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">
<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"/>
<echo-component doc:name="Echo"/>
</flow>
</mule>

Je vois l'objet-à-json dans le code, qui je crois est configuré à partir du Noeud HTTP-> Paramètres HTTP-> type de contenu, qui est défini sur

application/json

Je suppose donc que l'objet entrant est au format JSON une fois dans le flux, sans aucun autre objet vers les nœuds JSON requis.

J'envoie la chaîne suivante au flux:

{ "uid" : "ABCxxx" }

Ce que j'essaie de réaliser pour obtenir un nœud quiexaminera et vérifiera que les trois premières lettres de l'uid sont "ABC", et si c'est le cas, envoyez-le sur un chemin, mais si les trois premiers caractères de l'uid ne correspondent pas à "ABC", pour descendre sur un autre chemin., trier comme une instruction IF avec une configuration vraie et fausse,

Voici un exemple de pseudo-code

IF uid[3] == "ABC"
GOTO Database Connector
else
GOTO JSON-TO-OBJECT Transformer

Ma question est: quel nœud dois-je utiliser pour effectuer cela, dois-je utiliser un filtre d'expression ou autre

... et comment écrire cela dans JSAONPath (ou autre)

(Est-ce que Mule ESB effectue ce genre de chose?)

Réponses:

2 pour la réponse № 1

L'évaluateur Json qui exécute JsonPath dans Muleest déconseillé au profit de MEL. L'approche préférée consiste maintenant à convertir json en un objet et à interroger l'objet à la place. L'une des approches les plus simples consiste à convertir le json en carte et à utiliser MEL pour interroger la carte. Ainsi:

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

<choice>
<when expression="#[payload.uid == "ABC"]">

</when>
</choice>

Plus d'infos ici: http://www.mulesoft.org/documentation/display/current/Mule+Expression+Language+Tips


0 pour la réponse № 2

Vous pouvez aussi <json:json-to-object-transformer returnClass="java.lang.Object" /> alternativement puis

 <choice>
<when expression="#[message.payload.uid == "ABC"]">