Я получаю следующее сообщение об ошибке в моей OSGi среде:Решение ошибки «Загрузчик нарушение ограничений» на «org.w3c.dom.Node» в 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
.
В «XML-APIs» расслоение необходимо в этом OSGi-среде, поскольку она обеспечивает другую версию org.w3c.dom
пакета, чем система пачка (например, org.w3c.dom.ElementTraversal
класса можно найти в разделе «XML-APIs» расслоении (и используется другими связями в моей среде), но не существует в системном комплекте).
Пакет javax.imageio
не доступен в отдельном комплекте, поэтому я не могу «заставить» его использовать импорт «xml-apis». Я также попытался явно импортировать версию «0.0.0» (системный пакет «версия») org.w3c.dom
в вызывающем пакете, но это тоже не работает, потому что это приводит к тому, что «использование пакетов использует конфликты» для других импортных org.w3c.dom
как используется ограничение).
Я немного из идей прямо сейчас. Кто-нибудь есть идея, как я могу решить эту проблему? Большое вам спасибо за вашу помощь заранее!
Я имел аналогичные проблемы, так что я переехал многие из XML-связанного классов в наличный один пучок на HTTPS://repository.everit.biz/nexus/content/groups/public/org/everit/osgi/bundles/org.everit.osgi.bundles.org.apache.xmlcommons.full/1.4.1/. После этого я удалил пакеты javax.xml, которые уже находятся в этом пакете из пути класса загрузки osgi. С тех пор все работает хорошо. –
Спасибо за ваше предложение, я попробую! – arjenh
@Balazs: Использование этого пакета не устранило ошибку, к сожалению, так как существовали еще два разных загрузчика классов, пытающихся загрузить org.w3c.dom.Node. Ниже приводится ответ Питера. Спасибо за предложение! – arjenh