Fino ad ora abbiamo solo stampato su console il messaggio inviato tramite URL, ma a noi serve che diventi il payload cioè il messaggio che viaggia nel nostro flusso; per capire la differenza basta sostituire #[payload]
all'espressione #[message.inboundProperties['codiceCliente']
, verrà dunque stampata la seguente stringa, cioè l'intero URL a partire dal contesto.:
/startMuleExample?codiceCliente=ddd
Dobbiamo quindi prevedere un componente che setti il payload al valore #[message.inboundProperties['codiceCliente']
; ci sono diverse possibilità, la più veloce prevede l'utilizzo di un Transformer setPayload dalla palette oppure delegando la trasformazione ad un componente Java che implementi il codice specifico per la trasformazione:
Questa la classe:
package myutils;
import org.mule.api.MuleEventContext;
public class MyHttpTransformer implements org.mule.api.lifecycle.Callable {
@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
return eventContext.getMessage().getInboundProperty("codiceCliente") ;
}
}
Se aggiungiamo un ulteriore componente logger e facciamo stampare il payload (con #[payload]
) diverrà visibile su console il codice cliente.
Ora che abbiamo il codice cliente a disposizione dobbiamo richiamare il Web service inizialmente creato passandogli il codice stesso, Mule prevede ancora il componente CXF che può essere utilizzato anche come client per la chiamata; a tal proposito è richiesta una chiamata con risposta al Web service calcolo cliente
, ma per implementare tale modalità abbiamo bisogno di un sub-flow, cioè di un flow figlio che riceverà dal parent l'intero contesto (e la sessione) di esecuzione. In questo modo possiamo richiamare il Web service e restituire la risposta al main flow. Chiameremo il nostro sub-flow calcolo_cliente_web_service_call
.
Abbiamo dunque specificato la chiamata al metodo checkCodeNumber
del nostro Web service, mentre abbiamo aggiunto al componente client il connector HTTP che, ovviamente, 'aggancia' il Web service:
Ora non ci resta che richiamare il sub-flow calcolo_cliente_web_service_call
dal main-flow tramite il componente Flow Reference:
Il flusso quindi prevede l'estrazione del codice Cliente e la chiamata al nostro Web service che ci restituisce (in forma cablata) il codice JSON, ora dobbiamo capire se il codiceCliente
risulta valorizzato oppure no utilizzando il Data Mapper, un componente di Mule che trasforma un oggetto in un altro. Nel nostro caso faremo trasformare la risposta JSON (presente anche nel file 'jsonExample.json') in una classe Pojo.
{"nome":"giuseppe",
"cognome": "astarita",
"codiceIban": "HGFSHGASCCX243234"}
Questo il Pojo che, non a caso, contiene gli stessi field del messaggio JSON:
package myutils;
public class JsonPojoClazz {
private String nome;
private String cognome;
private String codiceIban;
public JsonPojoClazz() {
super();
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCognome() {
return cognome;
}
public void setCognome(String cognome) {
this.cognome = cognome;
}
public String getCodiceIban() {
return codiceIban;
}
public void setCodiceIban(String codiceIban) {
this.codiceIban = codiceIban;
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("\r\n nome:" + nome);
sb.append("\r\n cognome:" + cognome);
sb.append("\r\n iban:" + codiceIban);
return sb.toString();
}
}
Nel prossimo articolo completeremo il lavoro svolto fino ad ora con l'aggiunta del componente Data Mapper e del Logger.