2014-04-28 16 views
6

ho un'eccezione cattura default in Mule, e sto cercando di ottenere l'accesso al messaggio di eccezione, utilizzando un'espressione Mulo: # [eccezione]Mulo: ottenere una sospensione del messaggio di eccezione

Questo doesn' Sembra che funzioni, e immagino che sto provando ad accedere alla variabile sbagliata? Sto cercando di accedere utilizzando logger e anche eseguire un componente personalizzato che prende in un messaggio di eccezione (come una stringa.)

Grazie,

+0

Puoi condividere l'errore messaggio dai registri –

+0

Dopo un po 'di tempo ho capito che il mio problema era dovuto all'annidamento # [] dove non avrebbero dovuto essere annidati. Tuttavia, ho ancora un problema, # [eccezione] restituirà l'errore superiore di Mule, che non è molto interessante in ciò che è realmente accaduto. Sto solo invocando un componente fallito, mentre l'errore reale che voglio produrre è l'errore di root (permesso negato su una creazione di directory da sftp.) Un modo per ottenere il messaggio di errore di root dall'oggetto # [exception]? –

+1

# [exception.getCause()] effettivamente mi ottiene quello che voglio –

risposta

5

Si può fare #[exception.causedBy] come

<choice-exception-strategy> 
     <catch-exception-strategy when="exception.causedBy(com.company.BusinessException)"> <!-- [1] --> 
      <jms:outbound-endpoint queue="dead.letter"> 
       <jms:transaction action="ALWAYS_JOIN" /> 
      </jms:outbound-endpoint> 
     </catch-exception-strategy> 
     <rollback-exception-strategy when="exception.causedBy(com.company.NonBusinessException)"> <!-- [2] --> 
      <logger level="ERROR" message="Payload failing: #[payload]"/> 
     </rollback-exception-strategy> 
    </choice-exception-strategy> 

Altro dettagli here

2

Salve se si desidera ottenere il messaggio di eccezione utilizzando MEL è possibile anche (in una strategia di eccezione di cattura) utilizzare la seguente espressione.

#[exception.cause.message] 
+1

questo può causare un'eccezione di puntatore nullo –

+0

sì hai ragione, la tua soluzione è puntatore null sicuro;) – Nicolas

9

In alcuni casi il exception.cause potrebbe essere null, quindi consiglia di utilizzare il condizionale per visualizzare il messaggio:

[(exception.cause!=null)?(exception.cause.message):exception] 

Questo consentirà di evitare nulla un'eccezione di puntatore.

8

modo migliore per ottenere messaggio di eccezione (null sicura) è:

#[exception.cause.?message or exception.cause]

+0

grazie .. funziona perfettamente .. – PankajChandankar

+1

Ciao @ Nirmal-thInk beYond. Qual è il punto interrogativo nella tua risposta? Che cosa fa? Grazie! --- Modifica --- Non importa! Ho appena trovato la risposta qui. https://docs.mulesoft.com/mule-user-guide/v/3.8/mule-expression-language-tips Grazie! – Rashiki

+0

@Rashiki il punto interrogativo è un controllo per un'eccezione del puntatore nullo. – granthbr

0

exception.cause potrebbe essere nullo in modo che possa essere gestita in questo modo:

#[exception.?cause.message or exception]