32.5. 启用 Saxon
先决条件
使用 Saxon 解析器的先决条件是对 camel-saxon
工件的依赖(将这个依赖项添加到 Maven POM 中,如果使用 Maven,或将 camel-saxon-2.23.2.fuse-7_13_0-00013-redhat-00001.jar
文件添加到 classpath 中)。
在 Java DSL 中使用 Saxon 解析器
在 Java DSL 中,启用 Saxon parser 的最简单方法是调用 saxon ()
fluent 构建器方法。例如,您可以调用 Saxon parser,如下例所示:
// Java // create a builder to evaluate the xpath using saxon XPathBuilder builder = XPathBuilder.xpath("tokenize(/foo/bar, '_')[2]").saxon(); // evaluate as a String result String result = builder.evaluate(context, "<foo><bar>abc_def_ghi</bar></foo>");
在 XML DSL 中使用 Saxon parser
在 XML DSL 中,启用 Saxon parser 的最简单方法是在 xpath
元素中将 saxon
属性设置为 true。例如,您可以调用 Saxon parser,如下例所示:
<xpath saxon="true" resultType="java.lang.String">current-dateTime()</xpath>
带有 Saxon 的编程
如果要在应用程序代码中使用 Saxon XML 解析器,您可以使用以下代码显式创建 Saxon transformer 工厂实例:
// Java import javax.xml.transform.TransformerFactory; import net.sf.saxon.TransformerFactoryImpl; ... TransformerFactory saxonFactory = new net.sf.saxon.TransformerFactoryImpl();
另一方面,如果您更喜欢使用通用 JAXP API 创建转换器工厂实例,您必须首先在 ESBInstall/etc/system.properties
文件中设置 javax.xml.transform.TransformerFactory
属性,如下所示:
javax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl
然后,您可以使用通用 JAXP API 实例化 Saxon 工厂,如下所示:
// Java import javax.xml.transform.TransformerFactory; ... TransformerFactory factory = TransformerFactory.newInstance();
如果您的应用程序依赖于使用 Saxon 的任何第三方库,则可能需要使用第二种通用方法。
Saxon 库必须安装在作为 OSGi 捆绑包( net.sf.saxon/saxon9he
)的容器中(默认通常安装)。在 7.1 之前的 Fuse ESB 版本中,无法使用通用 JAXP API 加载 Saxon。