Axis2 et parser XML

Axis2 et parser XML - Java - Programmation

Marsh Posté le 18-11-2009 à 17:14:47    

Bonjour,
 
j'ai développé des classes Java qui manipule du xml via xmlbeans 2.3 ; ce dernier utilise saxon8 pour faire des expression xpath.
Lorsque je lance l'application en mode standalone, tout se passe bien, aucune erreur.
 
J'ai packagé ces classes pour être accessibles via des services web et ai donc mis Axis2 en frontal. L'appel à mon service web se passe bien, mais lorsque mes classes Java utilisent xmlbeans et surtout saxon8 pour des expressions xpath, j'ai les erreurs suivantes :
 
"Trying XBeans path engine... Trying XQRL... Trying Saxon... FAILED" . Il s'agit d'une erreur typique (c'est la même erreur lorsqu'on utilise la mauvaise version de saxon par exemple) lorsque xmlbeans n'utilise pas le bon parser sax. Ce qui me laisse à penser qu'un autre parser sax se trouve dans le classpath ou tout simplement que mes jar ne sont pas "vus".
 
J'ai donc recopié mes jars de saxon dans tous les répertoires "common/lib - shared / lib / "... de Tomcat, j'ai même mis ces jers dans ma jre mais j'ai toujours le même résultat...  
 
bref, comment utiliser son propre parser XML SAX dans un environnement Tomcat / Axis2 ?
 
ah et impossible de faire System.setProperty("javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl" ); pour fixer le parser SAX via JAXP, il n'existe pas de classe "SAXParserFactoryImpl" dans saxon !!
 
bref, HELP !
 
Merci

Reply

Marsh Posté le 18-11-2009 à 17:14:47   

Reply

Marsh Posté le 18-11-2009 à 19:19:49    

Sans doute un problème de classpath, vérifie que xerces se situe en première position dans la liste de jar de ton classpath. La classe dont tu parles, org.apache.xerces.jaxp.SAXParserFactoryImpl, fait partie de Xerces et se trouve dans son jar. Saxon utilise Xerces comme parseur SAX.


Message édité par cbeyls le 18-11-2009 à 19:24:14
Reply

Marsh Posté le 25-11-2009 à 14:05:53    

Bonjour,
 
le problème est résolu, je poste donc la solution, au cas où ça puisse un jour dépanner qqun...
 
Effectivement, c'est un problème de classpath :
 
Axis2 (mis dans webapps/axis2) utilise ses propres parsers XML pour faires des sérialisation / désérialisation SOAP.
Or, j'ai un service déployé sous axis2 (dans webapps/axis2/services/monService) qui utilise lui aussi des parsers (fonctions xpath de xmlbeans qui lui a besoin de saxon). A l'exécution, les parsers choisis n'étaient plus ceux de la librairie mis dans webapps/axis2/services/monService mais bien ceux d'Axis2.  
 
La solution à mon problème était toute simple, mais impossible à détecter dans les traces :
 
- j'ai mis les librairies xbean.jar, xbean_xpath.jar, saxon9.jar, saxon9_xpath.jar, saxon9-dom.jar et surtout (c'est celle là qui me manquait) jdom.jar !! dans le répertoire lib de axis2 (j'ai donc remonté d'un cran de classpath ces librairies) pour qu'à l'exécution, tout marche parfaitement.
 
Note : Saxon version 9 pour XmlBeans 2.4, sinon, c'est une autre version de XmBeans qu'il faut impérativement utiliser...
 
Attention pour la solution  :o , elle reste très spécifique xmlbeans et ne concerne donc que des applications qui manipulent du XML avec XmlBeans avec une interface axis2 en frontal.
 
A+, les Javaïstes(eux?) d'Hardware et merci pour la réponse  :hello:  
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed