如何处理Java中的LinkedErrors?
在开发一个高度基于XML的Java应用程序时,我最近在Ubuntu Linux上遇到了一个有趣的问题。
我的应用程序使用Java插件框架,似乎无法将dom4j创建的XML文档转换为Batik的SVG规范实现。
在控制台上,我了解到发生了错误:
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)
我认为这个问题是由JVM的原始类装入器和插件框架部署的类装入器之间的冲突引起的。
据我所知,不可能为框架指定要使用的类装入器。也许可以破解它,但我更喜欢一种不那么激进的方法来解决这个问题,因为(无论出于何种原因)它只发生在Linux系统上。
你们中的某个人是否遇到过这样的问题,并且知道如何解决它或至少找到问题的核心?