Sto tentando di mappare una risposta da una chiamata di terze parti in una struttura diversa utilizzando la trasformazione DataMapper in Mule.Matrice su mappatura piatta in Mule in base alle condizioni
Dal terzo utente riceviamo una serie di elementi (tra le altre cose) e voglio mappare un singolo elemento all'interno dell'array su un oggetto (JSON). Ricevo un identificatore per l'articolo nella richiesta che è disponibile come argomento di input.
La mia domanda è, come posso mappare i campi dell'elemento in base all'identificatore?
risposta Esempio XML
<account>
<accountNumber>1234567</accountNumber>
<books>
<book>
<id>1</id>
<title>Sample title1</title>
<availableFrom>21-03-16</availableFrom>
</book>
<book>
<id>2</id>
<title>Sample title2</title>
<availableFrom>21-03-16</availableFrom>
</book>
<book>
<id>3</id>
<title>Sample title3</title>
<availableFrom>21-03-16</availableFrom>
</book>
</books>
</account>
deve diventare:
{
"person": {
"accountNumber": 1234567,
"selectedBook": {
"id": 1,
"title": "Sample title1"
},
"otherBooks": [
{
"id": 2,
"title": "Sample title2"
},
{
"id": 3,
"title": "Sample title3"
}
]
}
}
L'id del libro selezionato si svolge in un inputArgument.bookId
.
Posso completare la mappatura utilizzando una regola xpath per ciascuno dei campi, tuttavia, devo hardcode il bookId in xpath. Invece, ho bisogno di essere in grado di sostituire l'ID effettivo per quello fornito (e disponibile in inputArgument).
XPath per il titolo
/account/books/book[child::id=1]/title
Ho provato ad aggiungere MEL per sostituire l'id e varie altre correzioni, ma nulla sembra funzionare. C'è un modo per sostituire il campo bookId.
Nota: A causa di limitazioni del client, non è possibile utilizzare DataWeave.
Puoi provare for-each a/account/libri/libro. Quindi per ogni payload ottieni il valore di ciascun parametro. Il json non è altro che un semplice POJO, quindi trasforma l'oggetto in JSON Transformer dopo aver eseguito la mappatura dal payload for-each. –
Grazie Ralph. Non ho capito bene il concetto di "ottenere il valore di ogni parametro" - potresti fornire un po 'più di informazioni? – user2294382
Intendo quando si esegue iterazione su/account/books/using foreach, quindi è possibile ottenere ciascun elemento del libro. All'interno del foreach puoi trasformare in json e poi fare qualcosa come # [payload.id], # [payload.title] –