Apache Camel在doCatch的onWhen内调用bean提示方法未定义问题咨询
问题根因
- 你所使用的
bean(Class<FailureBean>, String)不是RouteBuilder类提供的实例方法,在路由DSL链式调用中直接调用该方法自然会触发未定义报错。Camel将调用Bean生成判断谓词的能力封装在静态工具类中,需要导入对应静态方法、调整方法调用写法即可修复。
修复方案
方案一:适配原书写法修复
- 在EmailRouter.java文件头部添加静态导入:
import static org.apache.camel.builder.Builder.method;
- 将报错行的
bean方法替换为method即可:
.onWhen(method(FailureBean.class, "httpAuthFail"))
你现有定义的FailureBean无需做任何改动,静态方法可以被Camel直接调用。
方案二:简化实现,无需自定义Bean
可以直接用Lambda表达式完成401状态码判断,省去维护FailureBean的成本,替换报错行代码为以下内容即可:
.onWhen(exchange -> { HttpOperationFailedException e = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, HttpOperationFailedException.class); return e.getStatusCode() == 401; })
注意补充导入org.apache.camel.Exchange类。
内容的提问来源于stack exchange,提问作者BenW
相关产品推荐
相关产品推荐

