これを行うには複数の方法があります (ルックアップの優先順位順):
直接インスタンス化
Saxon ファクトリを明示的にインスタンス化します(上記の Michael のコメントに同意します)。
TransformerFactory fact = new net.sf.saxon.TransformerFactoryImpl()
このアプローチは、コードがコンパイル時に Saxon を使用するようにロックされることを意味します。これは、利点 (間違ったプロセッサで実行されるリスクがない) または欠点 (実行時に別のプロセッサを構成する機会がない - Saxon Enterprise Edition でさえ) と見なすことができます。
Saxon-PE の場合は、 に置き換えcom.saxonica.config.ProfessionalTransformerFactory
ます。Saxon-EE の場合は、 に置き換えcom.saxonica.config.EnterpriseTransformerFactory
ます。
クラス名を指定
構築時にファクトリ クラスを指定します。
TransformerFactory fact = TransformerFactory.newInstance(
"net.sf.saxon.TransformerFactoryImpl", null);
注: Java 6 以降で利用可能です。Java 5 バージョンには、このメソッドはありません。
このアプローチにより、クラスパス検索のコストとリスクを回避しながら、実行時にプロセッサを選択できます。たとえば、アプリケーションは、さまざまな Saxon ファクトリ クラスから選択することにより、さまざまな Saxon エディションで実行できるようにする構成メカニズムを提供できます。
システム プロパティを使用
javax.xml.transform.TransformerFactory
インスタンスを作成する前に、システム プロパティを設定します。
System.setProperty("javax.xml.transform.TransformerFactory",
"net.sf.saxon.TransformerFactoryImpl");
または、コマンド ラインで (読みやすいように改行しています):
java -Djavax.xml.transform.TransformerFactory=
net.sf.saxon.TransformerFactoryImpl YourApp
このアプローチには、システム プロパティが Java VM 全体に影響するという欠点があります。このプロパティを設定して Saxon を選択すると、アプリケーション内の他のモジュール (あなたが知らないかもしれません) が Xalan の代わりに Saxon を使用し始め、そのモジュールが Xalan 固有の XSLT コンストラクトを使用している場合、結果として失敗する可能性があります。
プロパティファイルを使用
次のファイルを作成します。
JRE/lib/jaxp.properties
以下の内容で:
javax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl
このアプローチは、システム プロパティを使用する場合と同様の結果をもたらします。
サービスローダー
CLASSPATH の任意の JAR に次のファイルを作成します。
META-INF/services/javax.xml.transform.TransformerFactory
以下の内容で:
net.sf.saxon.TransformerFactoryImpl
このアプローチには、クラスパスを少し変更すると、アプリケーションがテストされたことのない別の XSLT エンジンで実行される可能性があるという欠点があります。
プラットフォームのデフォルト
上記のいずれも実行されていない場合、プラットフォームのデフォルトTransformerFactory
インスタンスがロードされます。このプラグ可能性レイヤーの分かりやすい説明は、ここにあります。
ここでの「プラットフォーム」は Java VM を意味し、それが実行されているハードウェアやオペレーティング システムを意味しないことに注意してください。現在知られているすべての Java VM について、プラットフォームのデフォルトは Xalan のバージョンです (XSLT 1.0 のみをサポートします)。これが将来すべての Java VM に常に当てはまるという保証はありません。
この答えは、Javaのやり方に対する議論だと思います。