当前位置: 首页 > 知识库问答 >
问题:

在Apache Camel中,如何检查传入消息是否包含字符串

裘兴思
2023-03-14

我正在使用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”))给我一个编译错误。我想知道如何在骆驼路线中检查条件(消息中的文本)............将感谢任何帮助!!

共有1个答案

商华藏
2023-03-14

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