Tôi nhận được lỗi sau đây trong môi trường OSGi tôi:Giải quyết lỗi "nạp hạn chế vi phạm" trên "org.w3c.dom.Node" trong một môi trường 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)
Vấn đề là bó nơi cuộc gọi này xuất phát từ nhập khẩu org.w3c.dom.Node
(từ "xml-apis" bó), vì đây là kiểu trả về của phương pháp getAsTree(String formatName)
của javax.imageio.metadata.IIOMetadata
, trong khi lớp này tự nhập khẩu org.w3c.dom.Node
từ gói hệ thống, bởi vì nó nằm trong gói hệ thống.
Điều này dẫn đến org.w3c.dom.Node
được tải bởi hai trình nạp lớp khác nhau và do đó vi phạm ràng buộc trình tải hiển thị ở trên, khi phương thức getAsTree
được gọi. Cần có gói "xml-apis" trong môi trường OSGi này vì nó cung cấp phiên bản khác nhau của gói org.w3c.dom
so với gói hệ thống được sử dụng bởi các gói khác trong môi trường của tôi), nhưng không tồn tại trong gói hệ thống).
Gói javax.imageio
không có sẵn trong một gói riêng biệt, vì vậy tôi không thể "buộc" gói đó để sử dụng nhập "xml-apis". Tôi cũng đã cố gắng nhập phiên bản "0.0.0" (gói hệ thống 'phiên bản') của org.w3c.dom
vào gói gọi, nhưng điều này không hoạt động, vì điều này dẫn đến "gói sử dụng xung đột" trên các hàng nhập khác (có org.w3c.dom
làm hạn chế sử dụng).
Tôi hiện có một chút ý tưởng. Có ai có một ý tưởng làm thế nào tôi có thể khắc phục vấn đề này? Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn trước!
Tôi đã có vấn đề tương tự vì vậy tôi di chuyển nhiều xml lớp liên quan thành một bó có sẵn tại https://repository.everit.biz/nexus/content/groups/public/org/everit/osgi/bundles/org.everit.osgi.bundles.org.apache.xmlcommons.full/1.4.1/. Sau đó tôi đã gỡ bỏ các gói javax.xml đã có trong gói này từ đường dẫn lớp khởi động osgi. Vì mọi thứ dường như hoạt động tốt. –
Cảm ơn bạn đã đề xuất của bạn, tôi sẽ cố gắng! – arjenh
@Balazs: Việc sử dụng gói đó không giải quyết được lỗi, vì vẫn có hai trình nạp lớp khác nhau đang cố gắng tải org.w3c.dom.Node. Câu trả lời của Peter dưới đây sửa lỗi đó. Nhờ đề nghị mặc dù! – arjenh