2014-04-28 14 views
6

mam wyjątek domyślny catch w mule, i próbuję uzyskać dostęp do wiadomości wyjątku, stosując muł wyrażenie: # [wyjątek]Mule: coraz luku wiadomości wyjątków

to robi” wydaje się działać i przypuszczam, że próbuję uzyskać dostęp do niewłaściwej zmiennej? Próbuję go zalogować przy użyciu rejestratora, a także uruchomić niestandardowy składnik, który pobiera komunikat wyjątku (jako ciąg).

Dzięki

+0

można udostępnić błąd wiadomość z dzienników –

+0

Po pewnym czasie zorientowałem się, że mój problem spowodowany jest zagnieżdżeniem się w [#] tam, gdzie nie powinny być zagnieżdżone. Jednak nadal mam problem, # [wyjątek] zwróci błąd Mule top, co nie jest bardzo interesujące w tym, co naprawdę się stało. Właśnie zaczynam wywoływać komponent, który się nie powiódł, podczas gdy prawdziwym błędem, który chcę wypisać, jest błąd root'a (odmowa uprawnień do tworzenia katalogu z sftp). Czy jest jakiś sposób na uzyskanie komunikatu o błędzie root z # obiektu [wyjątku]? –

+1

# [exception.getCause()] faktycznie dostaje mi, co chcę –

Odpowiedz

5

Można zrobić #[exception.causedBy] jak

<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> 

Więcej szczegóły here

2

Witam, jeśli chcesz uzyskać komunikat o wyjątku za pomocą MEL, możesz również (w strategii catchowania wyjątków) użyć następującego wyrażenia.

#[exception.cause.message] 
+1

może to spowodować zerowy wskaźnik wyjątku –

+0

tak masz rację, twoje rozwiązanie jest bezpieczne wskaźnik zerowy;) – Nicolas

9

W niektórych przypadkach exception.cause mogłyby być null, dlatego zaleca się stosowanie warunkowego, aby wyświetlić wiadomość:

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

To zapobiegnie pustego wskaźnika wyjątek.

8

Najlepszy sposób, aby dostać komunikat wyjątku (null bezpieczny) jest:

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

+0

dziękuję .. działa idealnie .. – PankajChandankar

+1

Witam @ Nirmal-thInk beyond. Jaki jest znak zapytania w Twojej odpowiedzi? Co to robi? Dzięki! --- Edytuj --- Nieważne! Właśnie znalazłem odpowiedź tutaj. https://docs.mulesoft.com/mule-user-guide/v/3.8/mule-expression-language-tips Dzięki! – Rashiki

+0

@Rashiki znak zapytania jest sprawdzeniem wyjątku wskaźnika pustego. – granthbr

0

exception.cause może być zerowa, więc to może być traktowane tak:

#[exception.?cause.message or exception]