如何在Apache Camel中配置Woodstox属性?
在Apache Camel 2.25.4中配置Woodstox特定属性
要给Camel的xtokenize组件配置Woodstox专属属性(比如WstxInputProperties.P_RETURN_NULL_FOR_DEFAULT_NAMESPACE),需要通过自定义XMLInputFactory实现,具体步骤如下:
1. 创建配置好Woodstox属性的XMLInputFactory实例
直接初始化Woodstox输入属性并绑定到它的XMLInputFactory实现类:
import com.ctc.wstx.api.WstxInputProperties; import com.ctc.wstx.stax.WstxInputFactory; import javax.xml.stream.XMLInputFactory; // 初始化Woodstox输入配置 WstxInputProperties wstxProps = new WstxInputProperties(); // 设置目标属性,这里以P_RETURN_NULL_FOR_DEFAULT_NAMESPACE为例 wstxProps.setProperty(WstxInputProperties.P_RETURN_NULL_FOR_DEFAULT_NAMESPACE, true); // 创建配置完成的Woodstox XMLInputFactory XMLInputFactory customXmlInputFactory = new WstxInputFactory(); ((WstxInputFactory) customXmlInputFactory).setProperties(wstxProps);
2. 将自定义工厂注册到Camel上下文
把配置好的工厂实例绑定到Camel注册表,方便路由中引用:
// 在Camel上下文初始化阶段执行此代码 camelContext.getRegistry().bind("customWstxInputFactory", customXmlInputFactory);
3. 在xtokenize中指定使用自定义工厂
修改路由中的xtokenize调用,通过xmlInputFactory()方法指定注册的工厂:
from("direct:xxx") .routeId("xxx") .split(body().xtokenize("//xxx:xxx", 'i', ns).xmlInputFactory("customWstxInputFactory"), myAggregationStrategy) .process(myProcessor) .end();
全局配置方案(可选)
如果希望所有Camel组件都使用这个配置好的Woodstox工厂,可直接设置Camel上下文的全局属性:
camelContext.getProperties().put("CamelXmlInputFactory", customXmlInputFactory);
无需在每个xtokenize中单独指定,全局生效。
内容的提问来源于stack exchange,提问作者vincent_tang
相关产品推荐
相关产品推荐

