2009-07-02 6 views
0

J'ai un morceau de code qui fonctionne bien dans l'isolement, mais utilisé une dépendance dans un projet de clients échoue. Un appel àComment faire pour déboguer l'échec de dépannage de Java sur la version de DOMImplementation

Document doc = impl.createDocument (null, null, null);

échoue (ressemble au problème à http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4913257). L'instance de 'impl' dans mes tests unitaires est une instance de com.sun.org.apache.xerces.internal.dom.DOMImplementationImpl. Dans le code de mes clients, c'est une instance de org.apache.xerces.dom.DOMImplementationImpl.

Comment puis-je retracer cette dépendance? J'ai essayé de parcourir manuellement toutes les classes et fichiers jar dans le classpath, mais je ne trouve pas le fournisseur de org.apache.xerces.dom.DOMImplementation. Est-il possible d'observer quand les classes sont chargées (et pourquoi)? Comment l'implémentation DOM particulière est-elle sélectionnée? Puis-je forcer le jvm à utiliser une implémentation particulière?

Répondre

1

La mise en œuvre dans le paquet « com.sun.org.apache ... » est le Xerces qui est empaqueté dans le cadre du JRE. Celui qui démarre "org.apache ..." est la distribution autonome d'Apache. Ils peuvent être exécutés ensemble dans la même application, mais cela peut être assez déroutant.

Le projet de votre client semble contenir une copie de la distribution apache autonome (probablement xercesImpl.jar). Demandez-leur de le remettre, de le vérifier et de voir s'il commence à utiliser le code JRE intégré.

+0

Cela a du sens. Maintenant, la question vient à quel jar a la distribution apache. Il n'y a pas de xercesImpl dans le classpath, et je ne peux pas trouver quel jar a les classes org.apache.xerces. *. Exécuter avec -Djaxp.debug = true imprime JAXP: trouvé ressource jar = META-INF/services/javax.xml.parsers.DocumentBuilderFactory en utilisant ClassLoader: [email protected] mais malheureusement, il ne dit pas quel pot. – eaubin

+0

Il doit y avoir un fichier JAR contenant une entrée META-INF/services/javax.xml.parsers.DocumentBuilderFactory. N'oubliez pas de vérifier également à l'intérieur de l'installation JRE du client aussi, ils pourraient avoir laissé tomber des xerces là-bas. – skaffman

0

Très probablement, vous n'avez pas xercesImpl.jar dans le classpath projet client

Questions connexes