25.2. CSimple 和 Simple 之间的不同


简单语言是一种动态表达式语言,被运行时解析为一组 Camel Expressions 或 Predicates。

Csimple 语言被解析为常规 Java 源代码,并与所有其他源代码一起编译,或者在通过 camel-csimple-joor 模块 bootstrap 期间编译一次。

简单语言通常非常轻便且快,但对于一些通过 OGNL 路径进行动态方法调用的用例,则简单的语言执行运行时内省和反映调用。这对性能有开销,是创建简单原因的原因之一。

csimple 语言需要通过 OGNL 路径是 typesafe 和 method 调用,需要了解解析期间的类型。这意味着,对于 csimple 语言表达式,您需要在脚本中提供类类型,而简单的内省则在运行时是这个类。

换句话说,简单语言使用 duck typing (如果看起来像一个 duck )和 quacks (像 duck),那么它是一个 duck,而 csimple 则正在使用 Java 类型(类型安全)。如果有类型错误,则 simple 会在运行时报告此功能,而 csimple 会出现 Java 编译错误。

25.2.1. 额外的 CSimple 功能

csimple 语言包括一些额外的函数,它们支持使用 Collection, Map 或数组类型的一般用例。以下函数 bodyAsIndexheaderAsIndexexchangePropertyAsIndex 用于这些用例,因为它们被输入。

Expand
功能类型描述

bodyAsIndex(type, index)

类型

为了用于从现有的 CollectionMap 或 数组(按索引查找)收集正文,然后将正文转换为其 classname 确定的给定类型。转换的正文可以是 null。

mandatoryBodyAsIndex(type, index)

类型

为了用于从现有的 CollectionMap 或 数组(按索引查找)收集正文,然后将正文转换为其 classname 确定的给定类型。期望正文不是 null。

headerAsIndex (,type,index)

类型

为了用于从现有的 CollectionMap 或 数组(按索引查找)收集标头,然后将标头值转换为其 classname 确定的给定类型。转换的标头可以是 null。

mandatoryHeaderAsIndex (key,type,index)

类型

为了用于从现有的 CollectionMap 或 数组(按索引查找)收集标头,然后将标头值转换为其 classname 确定的给定类型。期望标头不是 null。

exchangePropertyAsIndex(key, type, index)

类型

为了用于从现有的 CollectionMap 或 数组(由索引查找)收集交换属性,然后将 Exchange 属性转换为其 classname 确定的给定类型。转换的交换属性可以是 null。

mandatoryExchangePropertyAsIndex(key, type, index)

类型

为了用于从现有的 CollectionMap 或 数组(由索引查找)收集交换属性,然后将 Exchange 属性转换为其 classname 确定的给定类型。期望 exchange 属性不为空。

例如,给出以下简单表达式:

Hello $\{body[0].name}
Copy to Clipboard Toggle word wrap

此脚本没有类型信息,简单语言将在运行时解决,方法是内省消息正文,如果基于集合,则查找第一个元素,然后通过反映调用名为 getName 的方法。

在 csimple (编译)中,我们希望预编译它,因此最终用户必须使用 bodyAsIndex 功能提供类型信息:

Hello $\{bodyAsIndex(com.foo.MyUser, 0).name}
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat