32.5. 启用 Saxon

先决条件

使用 Saxon 解析器的先决条件是,您将依赖 camel-saxon 工件(请将这个依赖项添加到您的 Maven POM 中,如果使用 Maven,或者添加 camel-saxon-2.23.2.fuse-7_10_0-00018-redhat-00001.jar 文件到您的类路径中)。

在 Java DSL 中使用 Saxon parser

在 Java DSL 中,启用 Saxon 解析器的最简单方法是调用 saxon() fluent builder 方法。例如,您可以调用 Saxon 解析器,如下例所示:

// 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 解析器,如下例所示:

<xpath saxon="true" resultType="java.lang.String">current-dateTime()</xpath>

使用 Saxon 编程

如果要在应用程序代码中使用 Saxon XML 解析程序,您可以使用以下代码明确创建 Saxon 转换器实例:

// 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。