.when().jsonpath(myClass.getJsonPathExpressions().get(),true)在json路径表达式为空时不起作用。

问题描述 投票:0回答:1
 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路径表达式,如果可能的话在一条语句中完成(不是嵌套选择时)。

apache-camel
1个回答
0
投票

这是一个纯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)

这样你只需在方法中隐藏所有的值检查的东西。

© www.soinside.com 2019 - 2024. All rights reserved.