34.3. 内置(In Type Converters)

概述

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

通常,通过方便功能调用类型转换器,如 Message.getBody(Class<T> type)Message.getHeader(String name, Class<T> type)。也可以直接调用 master 类型转换器。例如,如果您有一个交换对象 Exchange,您可以将给定值转换为 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、作者 和 StringReader 除外。String 类型可以转换为 文件,byte[], ByteBuffer,InputStream, 或 StringReader。通过将字符串解释为文件名,从 StringFile 可转换。字符串字节[]ByteBuffer 的 trio 完全可见。

注意

您可以通过在当前交换中设置 Exchange.CHARSET_NAME Exchange 属性,明确指定 用于从字节[] 转换的字符编码,从 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& gt; 类型的集合。

DOM 类型转换器

您可以对以下 Document Object Model(DOM)类型进行类型转换:

  • org.w3c.dom.Document InventoryService-jaxbconvertible from byte[]Stringjava.io.Filejava.io.InputStream.
  • org.w3c.dom.Node
  • javax.xml.transform.dom.DOMSource 匹配项( String )。
  • javax.xml.transform.Source 匹配项(从 byte[]String )中可见。

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

SAX 类型转换器

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

  • 字符串
  • InputStream
  • StreamSource
  • DOMSource

enum 类型 converter

Camel 提供了一个类型转换器,用于执行 num 类型转换的字符串,其中字符串值将转换为来自指定枚举类的匹配枚举数(匹配是 区分大小写)。 转换消息正文,很少需要这个类型转换程序,但 Apache Camel 在内部使用它来选择特定选项。

例如,当设置日志级别选项时,以下值 INFO 将被转换为 enum constant:

<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 章 类型转换器