2010-07-23 5 views
4

J'ai des analyseurs Xerces et Oracle XML dans le classpath de mon application (ne demandez pas pourquoi).Comment forcer l'utilisation d'un analyseur XML spécifique

Lorsque je crée un nouveau javax.xml.parsers.DocumentBuilderFactory, le chargeur de classe prend automatiquement en charge l'analyseur XML Oracle. Cependant, ce n'est pas une implémentation complète/correcte, donc ça me donne des maux de tête.

Existe-t-il un moyen de forcer/de dire au chargeur de classe d'utiliser les parces de Xerces lors de la construction de l'usine de création de documents?

Répondre

3

DocumentBuilderFactory a une méthode newInstance() où vous pouvez spécifier le nom de classe de l'implémentation que vous souhaitez utiliser.

+0

Merci beaucoup! Je devrais avoir RTFM. – dasp

+0

La marche inexorable du temps mène à des liens croulants, hélas. Cette URL obtient le même JavaDoc pour DocumentBuilderFactory # newInstance (String, ClassLoader): http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/DocumentBuilderFactory.html#newInstance%28java.lang .String,% 20java.lang.ClassLoader% 29 – pendor

+0

@pendor merci, corrigé – skaffman

3

Pour mon grand projet, la réponse de skaffman aurait fonctionné le plus souvent, mais PAS TOUJOURS parce que nous avons plusieurs sous-projets qui dépendent de ces bibliothèques. Nous avons regardé la source à javax.xml.transform.TransformerFactory.newInstance(), et avons trouvé qu'elle utilise javax.xml.transform.FactoryFinder.find ("javax.xml.transform.TransformerFactory", ...). Cette méthode examine ensuite un paramètre système pour déterminer l'implémentation correcte.

Nous finalement fixé en ajoutant des paramètres -D à notre moteur d'exécution pour forcer les classes correctes:

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

Questions connexes