34.3. built-In Type Converters
概述 复制链接链接已复制到粘贴板!
这部分论述了 master 类型转换器支持的转换。这些转换内置在 Apache Camel 内核中。
通常,类型转换器通过方便的功能调用,如 Message.getBody (Class<T> type) 或 Message.getHeader (String name, Class<T> 类型)。也可以直接调用 master 类型转换器。例如,如果您有一个交换对象 Exchange,您可以将给定值转换为 String,如 例 34.4 “将值转换为字符串” 所示。
例 34.4. 将值转换为字符串
org.apache.camel.TypeConverter tc = exchange.getContext().getTypeConverter(); String str_value = tc.convertTo(String.class, value);
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.InputStreamandjava.io.OutputStream -
java.io.Readerandjava.io.Writer -
java.io.BufferedReaderandjava.io.BufferedWriter -
java.io.StringReader
但是,并非所有这些类型都是可切换的。内置转换器主要用于提供从文件和字符串类型 的转换。文件类型 可以转换为任何上述类型,但 Reader、Writer、和 String 除外。Reader String 类型可以转换为 File,byte[], ByteBuffer,InputStream, 或 StringReader。从 String 转换到 File 的工作原理,可将字符串解释为文件名。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.DocumentHEKETI-rhacmconvertible frombyte[],String,java.io.File, 和java.io.InputStream. -
org.w3c.dom.Node -
来自 String 中的
javax.xml.transform.dom.DOMSourcemtcconvertable fromString. -
来自
byte[]和String的javax.xml.transform.Sourcemtcconvertable。
支持前面的 DOM 类型之间的转换。
SAX 类型转换器 复制链接链接已复制到粘贴板!
您还可以执行到 javax.xml.transform.sax.SAXSource 类型的转换,该类型支持 SAX 事件驱动的 XML 解析器(请参阅 SAX 网站 了解详细信息)。您可以从以下类型转换为 SAXSource :
-
字符串 -
InputStream -
Source -
StreamSource -
DOMSource
Enum 类型转换器 复制链接链接已复制到粘贴板!
Camel 提供了一个类型转换器,用于执行 String 到 enum 类型转换,其中字符串值将转换为来自指定枚举类的匹配的 enum 常量(匹配 区分大小写)。这个类型转换器很少需要转换消息正文,但它通常由 Apache Camel 内部用来选择特定选项。
例如,当设置日志级别选项时,以下值 INFO 会转换为 enum 常量:
<to uri="log:foo?level=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"/>
<to uri="log:foo?level=info"/>
<to uri="log:foo?level=INfo"/>
<to uri="log:foo?level=InFo"/>
自定义类型转换器 复制链接链接已复制到粘贴板!
Apache Camel 还允许您实施自己的自定义类型转换器。有关如何实现自定义类型转换器的详情,请参考 第 36 章 类型转换器。