34.3. built-In Type Converters


概述

本节论述了 master 类型转换器支持的转换。这些转换内置到 Apache Camel 内核中。

通常,类型转换器通过方便功能调用,如 Message.getBody (Class<T> 类型)Message.getHeader (String name, Class<T> type)。也可以直接调用 master 类型转换器。例如,如果您有一个交换对象 交换,您可以将给定值转换为 String,如 例 34.4 “将值转换为字符串” 所示。

例 34.4. 将值转换为字符串

org.apache.camel.TypeConverter tc = exchange.getContext().getTypeConverter();
String str_value = tc.convertTo(String.class, value);

基本类型转换器

Apache Camel 提供了内置的类型转换器,它执行到以下基本类型的转换:

  • java.io.File
  • 字符串
  • byte[] and java.nio.ByteBuffer
  • java.io.InputStream and java.io.OutputStream
  • java.io.Reader and java.io.Writer
  • java.io.BufferedReader and java.io.BufferedWriter
  • java.io.StringReader

但是,不是所有这些类型都是可互换的。内置的转换器主要侧重于提供来自文件和字符串类型 的转换文件类型 可以转换为上述任何类型,但 Reader、WriterString Reader 除外。String 类型可以转换为 File,byte[], ByteBuffer,InputStream, 或 StringReader。通过将字符串解释为 文件名,从 String 转换为文件可以正常工作。Stringbyte[]ByteBuffer 的 trio 完全可转换。

注意

您可以通过在当前交换中设置 Exchange.CHARSET_NAME Exchange 属性来 显式指定用于从 byte[] 转换到 String 的字符编码,并从 String 转换为 byte[]。例如,要使用 UTF-8 字符编码来执行转换,请调用 exchange.setProperty ("Exchange.CHARSET_NAME", "UTF-8")java.nio.charset.Charset 类中描述了支持的字符集。

集合类型转换器

Apache Camel 提供了内置的类型转换器,它执行到以下集合类型的转换:

  • Object[]
  • java.util.Set
  • java.util.List

支持对前一个集合类型之间的转换。

映射类型转换器

Apache Camel 提供了内置的类型转换器,它执行到以下映射类型的转换:

  • java.util.Map
  • java.util.HashMap
  • java.util.Hashtable
  • java.util.Properties

前面的映射类型也可以转换为 java.util.Set 类型的集合,其中 set 元素是 MapEntry<K,V > 类型。

DOM 类型转换器

您可以执行类型转换为以下文档对象模型(DOM)类型:

  • org.w3c.dom.Document mvapichconvertible from byte[], String,java.io.File, 和 java.io.InputStream.
  • org.w3c.dom.Node
  • Stringjavax.xml.transform.dom.DOMSource mvapichconvertibleible。
  • javax.xml.transform.Source mvapichconvertible from byte[]String.

支持上述 DOM 类型之间的所有转换。

SAX 类型转换器

您还可以执行对 javax.xml.transform.sax.SAXSource 类型的转换,该类型支持 SAX 事件驱动的 XML 解析器(详情请参阅 SAX 网站 )。您可以从以下类型转换为 SAXSource

  • 字符串
  • InputStream
  • StreamSource
  • DOMSource

Enum 类型转换器

Camel 提供了执行 String 类型转换的类型转换器,其中字符串值将从指定的枚举类中转换为匹配的 enum 常数(匹配 区分大小写)。转换消息正文很少需要这种转换器,但 Apache Camel 经常在内部使用这种转换器来选择特定选项。

例如,在设置日志级别选项时,以下值 INFO 会转换为 枚举 常数:

<to uri="log:foo?level=INFO"/>

因为 enum 类型转换器区分大小写,所以以下任何一个替代方案也可以正常工作:

<to uri="log:foo?level=info"/>
<to uri="log:foo?level=INfo"/>
<to uri="log:foo?level=InFo"/>

自定义类型转换器

Apache Camel 还允许您实施自己的自定义类型转换器。有关如何实现自定义类型转换器的详情,请参考 第 36 章 类型转换器

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.