【问题标题】:How to test Camel-Mail component?如何测试 Camel-Mail 组件?
【发布时间】:2014-02-24 19:32:08
【问题描述】:

我有一种情况,我使用Camel-Mail 从后端进程生成电子邮件。有时会发送电子邮件,有时不会发送电子邮件。我添加了日志语句来验证 Camel-Mail 组件 在电子邮件没有发出的情况下正在执行。所以我的路由或 Camel-Mail 组件本身出了点问题。

在一个完美的世界里,我想对 Camel-Mail 生成的整个 SMTP 请求进行完整转储,这样我就可以看到它用来连接到SMTP 服务器就在它发出请求之前。我还想确保 Camel-Mail 没有捕获/忽略任何 SMTP/网络异常,或者它没有将它们记录到我永远不会收到日志语句的地方。

我怎样才能从 Java 中做到这一点?我怎样才能看到:

  • 如果 Camel 抛出/捕获/忽略任何从未出现在我的应用程序中的异常?或
  • 如果Camel在某些情况下无法连接到SMTP服务器;或
  • 如果 Camel 在某些情况下没有设置某些 SMTP 属性,会导致 SMTP 服务器忽略或丢弃请求?

【问题讨论】:

  • 您检查过垃圾邮件文件夹吗?我知道这听起来很傻,但可能就是这样。此外,如果您可以将骆驼路线添加到问题中,我们将能够查看它。当前问题没有足够的细节来正确回答。
  • 如果出现异常或错误,大多数组件的通常行为是抛出它。你能证实你没有在某个地方做onException(Exception.class).handled().etc...吗?也许甚至请发布您的路由构建器代码。
  • 我也可以说我们用2.10的骆驼邮件组件用了很长时间都没有问题。

标签: java smtp apache-camel integration-testing


【解决方案1】:

您可以使用 doTry() 封装对邮件端点的调用。

from("direct:start")
.doTry()
    .to("smtp://matt@stackoverflow.com")
.doCatch(Exception.class)
    .to("log:somethings wrong")
.doFinally()
    .to("mock:finally")
.end();

显然在 .doCatch 块中做一些更有用的事情。这将捕获邮件组件抛出的任何异常。

更新:添加 Spring DSL 实现:

<from uri="direct:start"/>
<doTry>
    <to uri="smtp://matt@stackoverflow.com"/>
    <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

【讨论】:

  • 感谢@Matthew Wilson (+1) - 但是我使用的是 Spring XML。您的代码 sn-p 将如何转换为 XML?再次感谢!
  • 更新了我的答案以包含 Spring DSL 实现
猜你喜欢
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 2017-04-04
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
相关资源
最近更新 更多