第 70 章 CSimple


CSimple 语言 被编译 简单 语言。

70.1. CSimple 和 Simple 之间的区别

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

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

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

csimple 语言需要类型safe,并且通过 OGNL 路径的方法调用需要在解析期间知道类型。这意味着,您需要在脚本中提供类类型的 csimple 语言表达式,而简单的内省则在运行时进行内省。

换句话说,简单语言使用 duck 类型(如果它看起来像一个 duck,并且像 duck ),则 csimple 使用 Java 类型(typesafety)。如果存在类型错误,则 simple 将在运行时报告,并且 csimple 会出现 Java 编译错误。

70.1.1. 其他 CSimple 功能

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

功能类型描述

bodyAsIndex(type, index)

类型

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

mandatoryBodyAsIndex(type, index)

类型

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

headerAsIndex(key, type, index)

类型

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

mandatoryHeaderAsIndex(key, type, index)

类型

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

exchangePropertyAsIndex(key, type, index)

类型

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

mandatoryExchangePropertyAsIndex(key, type, index)

类型

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

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

Hello $\{body[0].name}

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

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

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.