我如何通过电子邮件发送异常,然后将原始消息返回到Camel route?

vkc1a9a2  于 2023-03-29  发布在  Apache
关注(0)|答案(1)|浏览(128)

我有一个验证bean的路由。如果验证失败,我想通过电子邮件发送验证异常,然后继续处理bean。以下是到目前为止我所做的:

onException(BeanValidationException.class)
     // the body is an instance of MyClass
    .setBody(simple("${exception}")) 
     // Now it's a String representation of the exception.
    .to("{{route.mail}}")
    .continued(true); //now what? how do I get back the instance of MyClass?
    
    from("{{route.from}}")
    .unmarshal(new BindyCsvDataFormat(MyClass.class))
    .to("bean-validator:priceFeedValidator")
    //continued processing of bean

当验证失败时,上面的代码发送电子邮件验证异常。这很好。但是当它继续处理bean时,它失败了,因为消息体不再是MyClass bean而是异常字符串。
我如何返回调用setBody之前的bean?
或者,有没有一种方法可以在电子邮件中发送异常,而不覆盖原始流的主体?

blpfk2vs

blpfk2vs1#

是的,你可以在发送电子邮件时将其更改为异常消息之前将正文存储在临时交换属性中,然后恢复它。
相关问题Camel Body: body1 -> body2 -> body1?
您还可以使用bean/处理器来发送电子邮件,并编写一些Java代码,从验证异常中获取 caused exception,并构建要发送的电子邮件(通过producer模板等),然后避免更改Camel路由中的消息正文。

相关问题