En développant une application Java fortement basée sur XML, j'ai récemment rencontré un problème intéressant sur Ubuntu Linux.
Mon application, qui utilise le Cadre de plugins Java semble incapable de convertir un dom4j -à un document XML créé par l'utilisateur Batik's de la spécification SVG.
Sur la console, j'apprends qu'une erreur se produit :
Exception in thread "AWT-EventQueue-0" java.lang.LinkageError: loader constraint violation in interface itable initialization: when resolving method "org.apache.batik.dom.svg.SVGOMDocument.createAttribute(Ljava/lang/String;)Lorg/w3c/dom/Attr;" the class loader (instance of org/java/plugin/standard/StandardPluginClassLoader) of the current class, org/apache/batik/dom/svg/SVGOMDocument, and the class loader (instance of <bootloader>) for interface org/w3c/dom/Document have different Class objects for the type org/w3c/dom/Attr used in the signature
at org.apache.batik.dom.svg.SVGDOMImplementation.createDocument(SVGDOMImplementation.java:149)
at org.dom4j.io.DOMWriter.createDomDocument(DOMWriter.java:361)
at org.dom4j.io.DOMWriter.write(DOMWriter.java:138)
Je suppose que le problème est causé par un conflit entre le classloader original de la JVM et le classloader déployé par le framework du plugin.
À ma connaissance, il n'est pas possible de spécifier un chargeur de classes à utiliser par le framework. Il est peut-être possible de le pirater, mais je préférerais une approche moins agressive pour résoudre ce problème, puisque (pour une raison quelconque) il ne se produit que sur les systèmes Linux.
L'un d'entre vous a-t-il rencontré un tel problème et a-t-il une idée de la manière de le résoudre ou au moins d'aller au cœur du problème ?