我的 OSGi 环境中出现以下错误:
java.lang.LinkageError: loader constraint violation: loader (instance of <bootloader>) previously initiated loading for a different type with name "org/w3c/dom/Node"
at javax.imageio.metadata.IIOMetadata.getStandardTree(IIOMetadata.java:716)
at com.sun.imageio.plugins.gif.GIFImageMetadata.getAsTree(GIFImageMetadata.java:128)
at com.xmlmind.fo.graphic.GraphicFactoryImpl.getResolution(GraphicFactoryImpl.java:184)
at com.xmlmind.fo.graphic.GraphicFactoryImpl.createGraphic(GraphicFactoryImpl.java:145)
at com.xmlmind.fo.graphic.GraphicFactories.createGraphic(GraphicFactories.java:128)
at com.xmlmind.fo.converter.Converter.createGraphic(Converter.java:1943)
at com.xmlmind.fo.converter.Converter.startExternalGraphic(Converter.java:1910)
at com.xmlmind.fo.converter.Converter.startElement(Converter.java:635)
at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
at com.xmlmind.fo.converter.Converter.convert(Converter.java:417)
问题是这个调用来自进口的捆绑包org.w3c.dom.Node
(来自“xml-apis”包),因为这是 的getAsTree(String formatName)
方法的返回类型javax.imageio.metadata.IIOMetadata
,而这个类本身是从系统包中导入org.w3c.dom.Node
的,因为它驻留在系统包中。
这导致org.w3c.dom.Node
被两个不同的类加载器加载,因此在getAsTree
调用该方法时会导致上面显示的加载器约束冲突。
在这个 OSGi 环境中,“xml-apis”包是必需的,因为它提供了org.w3c.dom
与系统包不同的包版本(例如,org.w3c.dom.ElementTraversal
该类可以在“xml-apis”包中找到(并且被其他包使用)我的环境),但系统捆绑包中不存在)。
该javax.imageio
软件包在单独的捆绑包中不可用,因此我不能“强制”它使用“xml-apis”导入。我还尝试org.w3c.dom
在调用 bundle 中显式导入版本“0.0.0”(系统捆绑“版本”),但这也不起作用,因为这会导致其他导入(具有org.w3c.dom
as uses约束)。
我现在有点没有想法。有谁知道我该如何解决这个问题?非常感谢您提前提供的帮助!