Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Creazione del Custom Transformer e del Logger

Impariamo i primi passi della procedura necessaria per la creazione del Custom Transformer e del Logger in Mule, dalla delega al componente Java fino alla chiamata del Web service tramite client CXF.
Impariamo i primi passi della procedura necessaria per la creazione del Custom Transformer e del Logger in Mule, dalla delega al componente Java fino alla chiamata del Web service tramite client CXF.
Link copiato negli appunti

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:

Figura 1. Il componente Java per l'estrazione di codiceCliente
Il componente Java per l'estrazione si codiceCliente

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.

Figura 2. La chiamata al Web service
La chiamata al Web service

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:

Figura 3. Aggancio al Web service "calcolo cliente"
Aggancio al Web service calcolo cliente

Ora non ci resta che richiamare il sub-flow calcolo_cliente_web_service_call dal main-flow tramite il componente Flow Reference:

Figura 4. L'aggancio al sub-flow

L'aggancio al sub-flow

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.


Ti consigliamo anche