在开发一个大量基于 XML 的 Java 应用程序时,我最近在 Ubuntu Linux 上遇到了一个有趣的问题。
我的应用程序使用Java Plugin Framework似乎无法将dom4j创建的XML 文档转换为Batik 的SVG 规范实现。
在控制台上,我了解到发生了错误:
线程“AWT-EventQueue-0”java.lang.LinkageError 中的异常:接口 itable 初始化中的加载程序约束冲突:解析方法“org.apache.batik.dom.svg.SVGOMDocument.createAttribute(Ljava/lang/String;)Lorg 时/w3c/dom/属性;" 当前类 org/apache/batik/dom/svg/SVGOMDocument 的类加载器(org/java/plugin/standard/StandardPluginClassLoader 的实例)和接口 org/w3c/ 的类加载器(<bootloader> 的实例) dom/Document 对于签名中使用的 org/w3c/dom/Attr 类型有不同的 Class 对象 在 org.apache.batik.dom.svg.SVGDOMImplementation.createDocument(SVGDOMImplementation.java:149) 在 org.dom4j.io.DOMWriter.createDomDocument(DOMWriter.java:361) 在 org.dom4j.io.DOMWriter.write(DOMWriter.java:138)
我认为问题是由来自 JVM 的原始类加载器和插件框架部署的类加载器之间的冲突引起的。
据我所知,不可能为要使用的框架指定类加载器。破解它可能是可能的,但我更喜欢用不那么激进的方法来解决这个问题,因为(无论出于何种原因)它只发生在 Linux 系统上。
你们当中有人遇到过这样的问题吗?知道如何解决它或至少找到问题的核心吗?