Zurück |  | Weiter

## 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.

Zurück | Nach oben | Weiter
13.11. XPath-Einsatz | Zum Anfang | 13.13. Einsatz mit TestNG