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[]
andjava.nio.ByteBuffer
-
java.io.InputStream
andjava.io.OutputStream
-
java.io.Reader
andjava.io.Writer
-
java.io.BufferedReader
andjava.io.BufferedWriter
-
java.io.StringReader
但是,不是所有这些类型都是可互换的。内置的转换器主要侧重于提供来自文件和字符串类型 的转换
。文件类型
可以转换为上述任何类型,但 Reader、Writer
和 String
除外。Reader
String
类型可以转换为 File
,byte[]
, ByteBuffer
,InputStream
, 或 StringReader
。通过将字符串解释为 文件名
,从 String
转换为文件可以正常工作。String
、byte[]
和 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 frombyte[]
,String
,java.io.File
, 和java.io.InputStream
. -
org.w3c.dom.Node
-
从
String
的javax.xml.transform.dom.DOMSource
mvapichconvertibleible。 -
javax.xml.transform.Source
mvapichconvertible frombyte[]
和String
.
支持上述 DOM 类型之间的所有转换。
SAX 类型转换器
您还可以执行对 javax.xml.transform.sax.SAXSource
类型的转换,该类型支持 SAX 事件驱动的 XML 解析器(详情请参阅 SAX 网站 )。您可以从以下类型转换为 SAXSource
:
-
字符串
-
InputStream
-
源
-
StreamSource
-
DOMSource
Enum 类型转换器
Camel 提供了执行 String
类型转换的类型转换器,其中字符串值将从指定的枚举类中转换为匹配的
常数(匹配 区分大小写)。转换消息正文很少需要这种转换器,但 Apache Camel 经常在内部使用这种转换器来选择特定选项。
enum
例如,在设置日志级别选项时,以下值 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 章 类型转换器。