2014-02-24 113 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实现 –