80.12. 使用带有 XPathBuilder 的 Saxon
您需要添加 camel-saxon 作为项目的依赖项。
现在,更易于将 Saxon 与 XPathBuilder 搭配使用,该Builder 可以通过几种方式完成,如下所示
- 使用自定义 XPathFactory
- 使用 ObjectModel
80.12.1. 使用系统属性设置自定义 XPathFactory 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Camel 现在支持读取 JVM 系统属性 javax.xml.xpath.XPathFactory,可用于设置要使用的自定义 XPathFactory。
这个单元测试演示了如何进行此操作来使用 Saxon:
如果使用非默认 XPathFactory,则 Camel 将以 INFO 级别记录,例如:
XPathBuilder INFO Using system property javax.xml.xpath.XPathFactory:http://saxon.sf.net/jaxp/xpath/om with value:
net.sf.saxon.xpath.XPathFactoryImpl when creating XPathFactory
XPathBuilder INFO Using system property javax.xml.xpath.XPathFactory:http://saxon.sf.net/jaxp/xpath/om with value:
net.sf.saxon.xpath.XPathFactoryImpl when creating XPathFactory
要使用 Apache Xerces,您可以配置系统属性
-Djavax.xml.xpath.XPathFactory=org.apache.xpath.jaxp.XPathFactoryImpl
-Djavax.xml.xpath.XPathFactory=org.apache.xpath.jaxp.XPathFactoryImpl
80.12.2. 从 XML DSL 中启用 Saxon 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
与 Java DSL 类似,若要从 XML DSL 启用 Saxon,您有三个选项:
引用自定义工厂:
<xpath factoryRef="saxonFactory" resultType="java.lang.String">current-dateTime()</xpath>
<xpath factoryRef="saxonFactory" resultType="java.lang.String">current-dateTime()</xpath>
并使用工厂声明 bean:
<bean id="saxonFactory" class="net.sf.saxon.xpath.XPathFactoryImpl"/>
<bean id="saxonFactory" class="net.sf.saxon.xpath.XPathFactoryImpl"/>
指定对象模型:
<xpath objectModel="http://saxon.sf.net/jaxp/xpath/om" resultType="java.lang.String">current-dateTime()</xpath>
<xpath objectModel="http://saxon.sf.net/jaxp/xpath/om" resultType="java.lang.String">current-dateTime()</xpath>
推荐的方法是设置 saxon=true,如下所示:
<xpath saxon="true" resultType="java.lang.String">current-dateTime()</xpath>
<xpath saxon="true" resultType="java.lang.String">current-dateTime()</xpath>