13.12. JAXP-Konfiguration

Die Standard-JAXP-Konfiguration des JDK kann über die allgemeinen Mechanismen der JAXP-Konfiguration verändert werden. Weil die aber nicht allgemein bekannt sind, werden sie am Beispiel von Xerces und Xalan nachfolgend erläutert.

Die Java-Runtime liest die Werte folgender JAXP-Umgebungsvariablen ein und lädt dann die dort angegebene Java-Klasse:

"javax.xml.parsers.DocumentBuilderFactory"
"javax.xml.parsers.SAXParserFactory"
"javax.xml.transform.TransformerFactory"

Diese Umgebungsvariablen können auf unterschiedliche Weise gesetzt werden, wie die nachfolgende Liste zeigt. Eine Konfigurationsmöglichkeit, die eine andere übersteuert, steht in der Aufzählung weiter oben.

  1. Die JAXP Umgebungsvariablen können im Programm selber gesetzt werden:

    System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
           "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
    System.setProperty("javax.xml.parsers.SAXParserFactory",
           "org.apache.xerces.jaxp.SAXParserFactoryImpl");
    System.setProperty("javax.xml.transform.TransformerFactory",
           "org.apache.xalan.processor.TransformerFactoryImpl");
  2. Die Konfigurationsdaten können mit der Startoption -D in der Umgebungsvariablen _JAVA_OPTIONS bereitgestellt werden. Hier wird nur ein Wert als Beispiel dargestellt, drei sind natürlich auch möglich:

    set _JAVA_OPTIONS=-Djavax.xml.transform.TransformerFactory=
                        org.apache.xalan.processor.TransformerFactoryImpl
  3. Die Konfigurationsdaten können mit der Startoption -D in der Umgebungsvariablen JAVA_TOOL_OPTIONS bereitgestellt werden. Diese Umgebungsvariable wird von einigen JDK-Implementierungen ausgewertet. Auch hier wird nur ein Wert als Beispiel:

    set JAVA_TOOL_OPTIONS=-Djavax.xml.transform.TransformerFactory=
                            org.apache.xalan.processor.TransformerFactoryImpl
  4. Die Konfigurationsdaten können in der Datei jaxp.properties im Verzeichnis JAVA_HOME/jre/lib zur Verfügung gestellt werden:

    #
    # Sample configuration, file %JAVA_HOME%\jre\lib\jaxp.properties.
    #
    # Defaults in Java 1.7.0, Windows:
    #
    #javax.xml.parsers.DocumentBuilderFactory = \
               com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
    #javax.xml.parsers.SAXParserFactory       = \
               com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
    #javax.xml.transform.TransformerFactory   = \
               com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
    
    #
    # Values for Xerces and Xalan:
    #
    javax.xml.parsers.DocumentBuilderFactory = \
              org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
    javax.xml.parsers.SAXParserFactory       = \
              org.apache.xerces.jaxp.SAXParserFactoryImpl
    javax.xml.transform.TransformerFactory   = \
              org.apache.xalan.processor.TransformerFactoryImpl
  5. Die JAXP-Umgebungsvariablen können ANT über die Umgebungsvariable ANT_OPTS gesetzt werden:

    set ANT_OPTS=-Djavax.xml.transform.TransformerFactory=
                   org.apache.xalan.processor.TransformerFactoryImpl
    set ANT_OPTS=-Djavax.xml.parsers.DocumentBuilderFactory=
                   org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
    set ANT_OPTS=-Djavax.xml.parsers.SAXParserFactory=
                   org.apache.xerces.jaxp.SAXParserFactoryImpl

Die deklarierten XML/XSLT-Klassen müssen entweder im Classpath oder im Verzeichnis JAVA_HOME\jre\lib\ext liegen. Letzteres ist nicht zu bevorzugen, weil kaum jemand diese Möglichkeit kennt und eine eventuelle Fehlersuche wegen dieses Nicht-Wissens unnötig lange dauern würde.

Beachten Sie, dass Eclipse seine Umgebungsvariablen beim Start einliest und anschließend nicht verändert. Insofern müssen Sie Eclipse nach der Änderung einer Umgebungsvariablen neu starten.