第 36 章 类型转换器


摘要

Apache Camel 具有内置类型转换机制,用于将消息正文和消息标头转换为不同类型的。本章解释了如何通过添加您自己的自定义转换器方法来扩展类型转换机制。

36.1. 类型转换器架构

概述

本节论述了如果希望编写自定义类型转换器,则必须了解类型转换器的总体架构。如果您只需要使用内置类型转换器,请参阅 第 34 章 了解消息格式

类型转换器接口

例 36.1 “TypeConverter Interface” 显示 org.apache.camel.TypeConverter 接口的定义,所有类型转换器都必须实现。

例 36.1. TypeConverter Interface

package org.apache.camel;

public interface TypeConverter {
    <T> T convertTo(Class<T> type, Object value);
}
Copy to Clipboard Toggle word wrap

Master 类型转换器

Apache Camel 类型转换器机制遵循主/从模式。有许多 类型转换器(各自能够执行有限的类型转换)和单一 类型转换器(聚合了从设备执行的类型转换)。主类型转换器充当从类型转换器的前端。当您请求主设备来执行类型转换时,它会选择适当的从设备并将转换任务委派给那个从设备。

对于类型转换机制的用户,master 类型转换器是最重要的,因为它提供了访问转换机制的入口点。在启动过程中,Apache Camel 会自动将 master 类型转换器实例与 CamelContext 对象关联。要获取对 master 类型转换器的引用,您需要调用 CamelContext.getTypeConverter () 方法。例如,如果您有一个交换对象 交换,您可以获得对 master 类型转换器的引用,如 例 36.2 “获取主类型转换器” 所示。

例 36.2. 获取主类型转换器

org.apache.camel.TypeConverter tc = exchange.getContext().getTypeConverter();
Copy to Clipboard Toggle word wrap

类型转换器加载程序

主类型转换器使用 类型转换器 填充从类型转换器的注册表。类型转换器加载程序是实施 TypeConverterLoader 接口的任何类。Apache Camel 目前只使用一类类型转换器 loader ( annotation type converter of converter loader ) ( AnnotationTypeConverterLoader 类型)。

类型转换过程

图 36.1 “类型转换过程” 概述了类型转换过程,显示将给定数据值( )转换为指定类型的步骤。

图 36.1. 类型转换过程

类型转换机制继续,如下所示:

  1. CamelContext 对象包含对 master TypeConverter 实例的引用。转换过程的第一步是通过调用 CamelContext.getTypeConverter () 来检索主类型转换器。
  2. 通过调用 master 类型转换器上的 convertTo () 方法来发起类型转换。此方法指示类型转换器将数据对象( )从原始类型转换为 toType 参数指定的类型。
  3. 由于主类型转换器是许多不同的从类型转换器的前端,它通过检查类型映射的 registry 来查找适当的 slave 类型转换器 ,因此类型转换器的注册表由类型映射对(Type )进行键化。如果在 registry 中找到合适的类型转换器,主类型转换器调用 slave 的 convertTo () 方法并返回结果。
  4. 如果 registry 中无法找到合适的类型转换器,则 master 类型转换器会加载一个新的类型转换器,使用类型转换器加载程序。
  5. 类型转换器加载程序在类路径上搜索可用的 JAR 库,以查找合适的类型转换器。目前,所用的加载程序策略由注解类型转换器加载,该加载由 org.apache.camel.Converter 注解标注的类。请参阅 “创建一个 TypeConverter 文件”一节
  6. 如果类型转换器加载程序成功,则会加载一个新的 slave 类型转换器,并将其输入到类型转换器 registry 中。然后,使用此类型转换器将 value 参数转换为 toType 类型。
  7. 如果数据被成功转换,则返回转换的数据值。如果转换不成功,则返回 null
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat