java - Apache Camel : Is there any way to set a message to fault without injecting the exchange in a bean method?

标签 java apache-camel

我对 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/

相关文章:

filter - Camel HeaderFilterStrategy CamelHttpQuery

java - 如何将 Apache Camel 集成到 Java Spring 3.0 Web 应用程序中以导入数据

java - 如何打印HashMap元素从最大到最小

java - 如何创建 .jar 冷

Java 编译时出现一般错误 : "type argument is not within bounds of type-variable T"

java - 根据属性值从 ArrayList 打印选定的对象

java - Apache Camel Spring XML - 从文件名表达式调用 Bean 方法

java - 如何在native中写/读直接的ByteBuffer?

java - 在受控循环中调用端点

java - Camel ActiveMQ 性能调优