2014-02-24 196 views
0

我有一種情況,我使用Camel-Mail從後端進程生成電子郵件。有些時候,電子郵件會被髮送,有些時候電子郵件不會被髮送。我添加了日誌記錄語句來驗證在電子郵件沒有外出的情況下,駱駝郵件組件正在執行。所以我的路線或駱駝郵件組件本身出了問題。如何測試駱駝郵件組件?

在一個完美的世界中,我想完整地轉儲Camel-Mail生成的整個SMTP請求,以便我可以看到它用於連接到的所有SMTP屬性/設置,連接詳細信息等SMTP服務器就在發出請求之前。我還想確保Camel-Mail不捕獲/忽略任何SMTP /網絡異常,或者它不會將它們記錄到永遠不會收到日誌語句的地方。

如何從Java中完成此操作?我怎麼看:

  • 如果駱駝拋出/捕捉/忽略任何異常,永遠不會冒泡到我的應用程序?或
  • 如果Camel在某些情況下無法連接到SMTP服務器;或
  • 如果Camel在某些情況下未設置某些SMTP屬性,導致SMTP服務器忽略或丟棄請求?
+1

你檢查垃圾郵件文件夾?我知道這聽起來很愚蠢,但情況可能如此。此外,如果您可以添加駱駝路線的問題,我們將能夠看到它。目前的問題沒有足夠的細節來正確回答。 – Namphibian

+0

如果存在異常或錯誤,大多數組件的通常行爲是拋出它。你能確認你沒有執行'onException(Exception.class).handled()。etc ...'某處嗎?也許請發佈您的routebuilder代碼。 – vikingsteve

+0

我也可以說,我們在2.10中使用駱駝郵件組件很長一段時間沒有問題。 – vikingsteve

回答

2

您可以使用doTry()將您的呼叫打包到郵件終端。

from("direct:start") 
.doTry() 
    .to("smtp://[email protected]") 
.doCatch(Exception.class) 
    .to("log:somethings wrong") 
.doFinally() 
    .to("mock:finally") 
.end(); 

很明顯,在.doCatch塊中做些更有用的事情。這將捕獲郵件組件拋出的任何異常。

更新:添加Spring DSL實現:

<from uri="direct:start"/> 
<doTry> 
    <to uri="smtp://[email protected]"/> 
    <doCatch> 
     <exception>java.lang.Exception</exception> 
     <to uri="log:somethings wrong"/> 
    </doCatch> 
    <doFinally> 
     <to uri="mock:finally"/> 
    </doFinally> 
</doTry> 

這裏的鏈接到文件 - http://camel.apache.org/try-catch-finally.html

+0

感謝@Matthew Wilson(+1) - 但是我使用的是Spring XML。你的代碼片段如何轉換爲XML?再次感謝! – AdjustingForInflation

+0

更新了我的答案以包含Spring DSL實現 –