我对 Apache Camel 完全陌生,在完成“Camel in Action”之后,我仍然不太清楚一个基本功能。有没有什么方法可以将消息设置为错误消息,而无需在 bean 方法中注入(inject)交换。
这里我可以提供一个例子:
class HttpBean{
public void parseIP(@Properties Map properties,@XPath("//ip") String ip){
properties.put("IP", ip);
}
}
名为“parseIP”的方法旨在使用 xpath 解析正文中的 ip 并将其值保存在属性映射中。但是如果 body 中根本没有 ip 标记,我想创建一条错误消息并终止进程(不仅仅是抛出一个将被视为可恢复错误的异常,这里我想要一个不可恢复的错误)。为了实现这个目标,我可以使用以下代码:
class HttpBean{
public void parseIP(@Properties Map properties,@XPath("//ip") String ip, Exchange exchange){
if(ip == null){
exchange.getIn().setFault(true);
exchange.getIn().setBody("Ip is missing");
}
properties.put("IP", ip);
}
}
但这是最好的解决方案吗?因为一旦我将交换注入(inject)到 bean 方法中,我认为它与 Camel 处理器没有什么不同,并且我失去了它的大部分优势。 Camel中的bean可以在不使用任何Camel特定API的情况下完成自己的工作,但是一旦注入(inject)交换,优势就消失了。
有人可以帮我解答一下这个问题吗?非常感谢。
最佳答案
只需根据 bean 的结果从路由设置故障...如果属性 IP 为空,则设置故障等...
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:route1")
.bean(new HttpBean())
.filter(property("IP").isNull()).setFaultBody(constant("Ip is missing")).end()
.to("mock:mock");
}
};
}
public static class HttpBean {
public void parseIP(@Properties Map properties, @XPath("//ip") String ip){
if(ip != null && ip.length() > 0){
properties.put("IP", ip);
}
}
}
关于java - Apache Camel : Is there any way to set a message to fault without injecting the exchange in a bean method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8592649/