32.5. Saxon の有効化

前提条件

Saxon パーサーを使用するための前提条件は、camel-saxon アーティファクトに依存関係を追加することです(Maven を使用している場合は、この依存関係を Maven POM に追加するか、camel-saxon-2.23.2.fuse-7_10_0-00018-redhat-00001.jar ファイルをクラスパスに追加します)。

Java DSL での Saxon パーサーの使用

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 パーサーの使用

XML DSL では、Saxon パーサーを有効にする最も簡単な方法は、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 を使用するサードパーティーのライブラリーに依存している場合、2 番目の汎用的なアプローチを使用する必要がある可能性があります。

注記

Saxon ライブラリーは、OSGi バンドル net.sf.saxon/saxon9he としてコンテナーにインストールする必要があります (通常はデフォルトでインストールされています)。バージョンが 7.1 未満の Fuse ESB では、汎用的な JAXP API を使用して Saxon をロードすることはできません。