我正在使用Apache Camel传递消息。该程序是Java。我想检查传入消息是否包含文本("故障代码:0")和("警告代码:0")如果确实如此,则不要向前发送...我的路线如下
from("direct:operation-send-"+getId())
.id("direct:operation-send-"+getId())
.setHeader(Exchange.HTTP_METHOD, constant("POST"))
.doTry()
.choice()
.when( ! body().contains("Fault Code: 0") )
.to(httpUrl.getUri())
.endChoice()
.endDoTry()
.doCatch(Exception.class)
.to("log:HTTP_SEND_CONNECTION_ERROR?level=ERROR&showHeaders=true")
.to("direct:operation-store-"+getId())
但是这部分(!body()。包含("故障代码:0"))给了我一个编译错误。我想知道如何检查Camel路线中的条件(消息中的文字)...........非常感谢任何帮助!!
答案 0 :(得分:1)
来自body()类的静态方法BuilderSupport会生成ValueBuilder个对象。这个对象提供了一种流畅的方式来构建Predicate
,这是功能Java世界中的习语之一。
我不打算详细了解Predicate
的工作方式(您可以更多地了解它们here),但它们不能用作简单的boolean
。这意味着,谓词不能用否定符号来否定 - !
,这就是你在这里尝试做的事情。
所以而不是:
.when( ! body().contains("Fault Code: 0") )
您需要使用ValueBuilder
的方法来形成您的条件。
另外,请注意您正在尝试检查您的身体是否包含String
个对象。我不确定您是否需要告诉ValueBuilder
.when(bodyAs(String.class).not().contains("Fault Code: 0"))
,but it seems like a common practice in Camel(我自己从未使用过)。
了解这两件事,解决方案似乎很简单。只需用以下内容替换违规行:
{{1}}
Camel是一个庞大的库,大量运行Java 8功能。首先确保你知道如何正确使用它们(有很多教程,例如this one)。
编辑:新版本的Camel(至少在2.18.3中)不推荐使用body(Class)方法,因此您应该使用bodyAs(Class)代替。
当您看到警告时,请务必检查javadoc,因为它们应包含有关弃用的内容的信息。
抑制警告通常不是一个好主意!
将来的版本中将删除已弃用的方法,当发生这种情况时,它会破坏您的构建。