第 70 章 CSimple


C Simple 语言 编译了简单 语言。

70.1. CSimple 和 Simple 之间的区别

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

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

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

csimple 语言需要通过 OGNL 路径键入safe 和 method 调用,需要在解析过程中知道类型。这意味着,对于 csimple 语言表达式,您需要在 脚本中提供类类型,而 simple 会在运行时内省它。

换言之,简单语言是使用 duck 输入 (如果看起来像 duck,像 duck),这是 duck,而 csimple 使用的是 Java 类型(typesafety)。如果存在类型错误,则 simple 会在运行时报告它,并且 csimple 将会出现 Java 编译错误。

70.1.1. 其他 CSimple 功能

csimple 语言包括一些额外的功能,它们支持处理 集合、映射或 数组类型的常见用例。以下函数 bodyAsIndex,headerAsIndex, 和 exchangePropertyAsIndex 用于在输入时使用这些用例。

功能类型描述

bodyAsIndex (类型,index)

类型

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

mandatoryBodyAsIndex (类型,index)

类型

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

headerAsIndex (,type,index)

类型

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

mandatoryHeaderAsIndex (,type,index)

类型

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

ExchangePropertyAsIndex (key,type,index)

类型

用于从现有 集合映射 或数组(通过索引查找)收集 Exchange 属性,然后将 exchange 属性转换为由类名称决定的给定类型。转换的交换属性可以是 null。

mandatoryExchangePropertyAsIndex (,type,index)

类型

用于从现有 集合映射 或数组(通过索引查找)收集 Exchange 属性,然后将 exchange 属性转换为由类名称决定的给定类型。期望 exchange 属性不是 null。

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

Hello $\{body[0].name}

此脚本没有类型信息,而 simple 语言在运行时将通过内省消息正文来解决此问题,如果它是基于集合的,则通过反射来调用名为 getName 的方法。

在 csimple (compiled)中,我们希望预先编译这一点,因此最终用户必须提供 bodyAsIndex 函数的类型信息:

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.