我正在使用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”))给我一个编译错误。我想知道如何在骆驼路线中检查条件(消息中的文本)............将感谢任何帮助!!
BuilderSupport类中的静态方法body()生成ValueBuilder对象。这个对象提供了一种流畅的方式来构建谓词
,这是函数式Java世界中的惯用用法之一。
我不打算详细介绍谓词
的工作原理(你可以在这里详细了解它们),但它们不能用作简单的布尔
。这意味着,谓词不能用否定符号来否定-
,这就是你在这里要做的。
因此,与其说:
.when( ! body().contains("Fault Code: 0") )
您需要使用
ValueBuilder
的方法来形成您的条件。
另外,请注意,您正在尝试检查您的身体是否包含
字符串
对象。我不确定你是否需要告诉ValueBuilder关于它的。
知道了这两件事,解决方案似乎很简单。只需将冒犯的一行替换为:
.when(bodyAs(String.class).not().contains("Fault Code: 0"))
Camel是一个巨大的库,大量使用Java8特性。首先确保你知道如何正确使用它们(有很多教程,比如这本)。
编辑:body(Class)方法在较新版本的Camel(至少在2.18.3中)中已弃用,因此您应该改用body As(Class)。
当您看到警告时,请务必检查javadocs,因为它们应该包含有关用什么替换不推荐的信息。
压制警告通常不是一个好主意!
已弃用的方法将在未来的版本中删除,当这种情况发生时,它将破坏您的构建。
问题内容: 我想检查我的字符串是否包含+字符。我尝试了以下代码 但是它没有给出预期的结果。 问题答案: 您需要此: 类的方法不使用正则表达式作为参数,而是使用普通文本。 编辑: 输出:
问题内容: 我需要检查字符串是否包含数字。任何数字。字符串是否为数字,而不是数字,但包含一个数字。 例子: ‘test’=没有数字。 ‘test2’=包含数字。 问题答案: 使用正则表达式: 不使用正则表达式:
问题内容: 通常我希望有一种方法,但是似乎没有。 有什么合理的方法来检查? 问题答案: ECMAScript 6引入了: 但是不支持。在ECMAScript 5或更旧的环境中,使用,当找不到子字符串时,它将返回-1:
通常我希望有方法,但似乎没有。 对此有什么合理的检查方法?
问题内容: 如何检查字符串中是否包含字符列表,例如“ ABCDEFGH”,如何检查字符串中是否有字符列表。 问题答案: 在Java中使用正则表达式检查在Java中使用 正则表达式 例如:
问题内容: 在Java forString类中,有一个称为matchs的方法,该方法如何使用正则表达式检查我的字符串是否只有数字。我尝试了以下示例,但它们均使我返回了false。 问题答案: 尝试 要么 按照Java 正则表达式 ,其 含义是“一次或多次”,并且其含义是“数字”。 注意:“双反斜杠”是一个 转义序列, 用于获取单个反斜杠-因此,在Java字符串中会提供实际结果: 参考文献: Jav