第 70 章 CSimple


CSimple 语言 编译简单 语言。

70.1. CSimple 和 Simple 不同

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

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

简单语言通常非常轻量级且快速,但对于一些通过 OGNL 路径调用的用例,简单语言会进行运行时内省和反映调用。这会降低性能,并且是创建 csimple 的原因之一。

csimple 语言要求通过 OGNL 路径进行 typesafe 和方法调用,才能在解析过程中了解类型。这意味着,您需要在脚本中提供类类型,而在运行时简单内省它,您需要提供脚本中的类类型。

换而言之,简单语言使用 duck 键入 (如果它看起来像 duck 和 quacks 相似),那么它是一个 duck,而 csimple 使用的是 Java 类型(类型安全)。如果出现类型错误,那么 simple 将在运行时报告此问题,而 csimple 则会出现 Java 编译错误。

70.1.1. 其他 CSimple 功能

csimple 语言包括一些额外的功能,以支持使用 集合、映射或阵列类型的通用用例。以下功能 bodyAsIndexheader AsIndex 和 ExchangePropertyAsIndex 用于这些用例。

功能类型Description

bodyAsIndex(type, index)

类型

用于从现有 Collection映射 或数组(由索引查找)收集正文,然后将正文转换为由类名决定的给定类型。转换的正文可以是 null。

mandatoryBodyAsIndex(type, index)

类型

用于从现有 Collection映射 或数组(由索引查找)收集正文,然后将正文转换为由类名决定的给定类型。预期正文不是 null。

headerAsIndex(key, type, index)

类型

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

mandatoryHeaderAsIndex(key, type, index)

类型

用于从现有 Collection映射 或数组(由索引查找)收集标头,然后将标头值转换为由 classname 确定的给定类型。预期标题不是 null。

exchangePropertyAsIndex(key, type, index)

类型

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

mandatoryExchangePropertyAsIndex(key, type, index)

类型

用于从现有 Collection映射 或数组(由索引查找)收集交换属性,然后将交换属性转换为由 classname 确定的给定类型。预期交换属性不是 null。

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

Hello $\{body[0].name}

此脚本没有类型信息,简单的语言会在运行时通过内省消息正文以及基于集合来解决此问题,然后查找第一个元素,然后通过反射调用名为 getName 的方法。

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

Hello $\{bodyAsIndex(com.foo.MyUser, 0).name}
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.