実際にインスタンスを作成せずに具体的なJAXPファクトリ実装が実装されることを予測するのはかなり難しいです。 Official JAXP FAQ(問14)から
:アプリケーションがDocumentBuilderFactory
インスタンス 新しいJAXPを作成したい場合は
、それはstaic方法 DocumentBuilderFactory.newInstance()
呼び出します。 これは 次の順序を使用して DocumentBuilderFactory
の 具象サブクラスの名前の検索が発生します。
javax.xml.parsers.DocumentBuilderFactory
などのシステムプロパティの値を、それが存在し、アクセス可能である場合。
- ファイル
$JAVA_HOME/jre/lib/jaxp.properties
の内容です。
- Jarファイル仕様で指定されたJarサービスプロバイダの検出メカニズム。 jarファイルは、具体化する具体的なクラスの名前を含む
META-INF/services/javax.xml.parsers.DocumentBuilderFactory
のようなリソース(すなわち埋め込みファイル)を有することができる。
- フォールバックプラットフォームのデフォルトの実装。
この複雑さに加えて、個々のJAXPファクトリには、独立した実装を指定することができます。 1つのパーサー実装ともう1つのXSLT実装を使用するのが一般的ですが、上記の選択メカニズムの細かさは、さらに大きな程度まで混在して一致させることができます。
4つの主なJAXPファクトリ約次のコードが出力情報:
private static void OutputJaxpImplementationInfo() {
System.out.println(getJaxpImplementationInfo("DocumentBuilderFactory", DocumentBuilderFactory.newInstance().getClass()));
System.out.println(getJaxpImplementationInfo("XPathFactory", XPathFactory.newInstance().getClass()));
System.out.println(getJaxpImplementationInfo("TransformerFactory", TransformerFactory.newInstance().getClass()));
System.out.println(getJaxpImplementationInfo("SAXParserFactory", SAXParserFactory.newInstance().getClass()));
}
private static String getJaxpImplementationInfo(String componentName, Class componentClass) {
CodeSource source = componentClass.getProtectionDomain().getCodeSource();
return MessageFormat.format(
"{0} implementation: {1} loaded from: {2}",
componentName,
componentClass.getName(),
source == null ? "Java Runtime" : source.getLocation());
}
次のサンプル出力は、3つの異なるJAXP実装(内蔵のXercesのミックス・アンド・マッチを示し、
DocumentBuilderFactory implementation: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl loaded from: file:/C:/Projects/Scratch/lib/xerces-2.8.0.jar
XPathFactory implementation: com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl loaded from: Java Runtime
TransformerFactory implementation: org.apache.xalan.processor.TransformerFactoryImpl loaded from: file:/C:/Projects/Scratch/lib/xalan.jar
SAXParserFactory implementation: org.apache.xerces.jaxp.SAXParserFactoryImpl loaded from: file:/C:/Projects/Scratch/lib/xerces-2.8.0.jar
は、あなたがチェックすることができます。 – eckes