35.4. ExchangeHelper 类
概述
org.apache.camel.util.ExchangeHelper 类是 Apache Camel 实用程序类,提供在实施处理器时有用的方法。
解析端点
静态 resolveEndpoint () 方法是 ExchangeHelper 类中最有用的方法之一。您可以在处理器中使用它来实时创建新的 Endpoint 实例。
例 35.6. resolveEndpoint () 方法
public final class ExchangeHelper {
...
@SuppressWarnings({"unchecked" })
public static Endpoint
resolveEndpoint(Exchange exchange, Object value)
throws NoSuchEndpointException { ... }
...
}
resolveEndpoint () 的第一个参数是交换实例,第二个参数通常是端点 URI 字符串。例 35.7 “创建文件端点” 演示了如何从交换实例 交换创建新文件端点
例 35.7. 创建文件端点
Endpoint file_endp = ExchangeHelper.resolveEndpoint(exchange, "file://tmp/messages/in.xml");
包装交换访问器
ExchangeHelper 类提供了多种静态方法,格式为 getMandatoryBeanProperty(), 它将在 Exchange 类上包装相应的 getBeanProperty() 方法。它们之间的区别在于,原始 getBeanProperty() accessors 返回 null (如果对应的属性不可用),getMandatoryBeanProperty() 打包程序方法会引发 Java 异常。以下打包程序方法在 ExchangeHelper 类中实施:
public final class ExchangeHelper {
...
public static <T> T getMandatoryProperty(Exchange exchange, String propertyName, Class<T> type)
throws NoSuchPropertyException { ... }
public static <T> T getMandatoryHeader(Exchange exchange, String propertyName, Class<T> type)
throws NoSuchHeaderException { ... }
public static Object getMandatoryInBody(Exchange exchange)
throws InvalidPayloadException { ... }
public static <T> T getMandatoryInBody(Exchange exchange, Class<T> type)
throws InvalidPayloadException { ... }
public static Object getMandatoryOutBody(Exchange exchange)
throws InvalidPayloadException { ... }
public static <T> T getMandatoryOutBody(Exchange exchange, Class<T> type)
throws InvalidPayloadException { ... }
...
}测试交换模式
几种不同的交换模式与保存 In 消息兼容。几种不同的交换模式也与保存 Out 消息兼容。要提供检查交换对象是否能够保存 In 消息还是 Out 信息的快速方法,ExchangeHelper 类提供了以下方法:
public final class ExchangeHelper {
...
public static boolean isInCapable(Exchange exchange) { ... }
public static boolean isOutCapable(Exchange exchange) { ... }
...
}获取 In 消息的 MIME 内容类型
如果要找到交换的 In 消息的 MIME 内容类型,您可以通过调用 ExchangeHelper.getContentType (exchange) 方法来访问它。为实现此目的,ExchangeHelper 对象查找 In message 的 Content-Type header iwl-wagon this 方法的值,它依赖于底层组件来填充标头值。