from("somegcpchannel").
.choice()
.when().jsonpath(myClassObject.getJsonPathExpressions().get(),true)//true will suppress exception if the path does not exist"
这个camel jsonpath组件的问题是,如果myClassObject.getJsonPathExpression()为空或空,它就会抛出一个异常,因此我被迫放一些假的json路径来让它工作。
如何才能先检查myClassObject.getJsonPathExpressions()是否为空,然后再处理json路径表达式,如果可能的话在一条语句中完成(不是嵌套选择时)。
这是一个纯Java的问题。你想使用存储在RouteBuilder类实例对象中的一个值来构造一个Camel Route。
myClassObject.getJsonPathExpressions().get()
当 myClassObject.getJsonPathExpressions()
返回 null
然后 .get()
方法显然会抛出一个NPE。因此,Camel路由不能被构造。
旁注:反正这是一个静态值。从对象返回的值是在构造路由时使用的,在应用程序运行时永远不会改变。
由于这是一个纯Java的问题,你不能用Camel来解决它。你必须用Java来解决它。
最简单的解决方案(正如你已经说过的)是始终提供一个值。为了让你的Route满意,只需在你的RouteBuilder类中添加一个方法,如果存在的话,返回对象值或一个合理的默认值。
private String getJsonPathExpression() {
if (whatever checks are needed) {
return myClassObject.getJsonPathExpressions().get(); // value present
} else {
return "default JsonPath that works" // no value present
}
}
然后在你的Route中使用这个方法,而不是直接使用对象。
.when().jsonpath(getJsonPathExpression(),true)
这样你只需在方法中隐藏所有的值检查的东西。