を「ローダー制約違反」エラーを解決:私はOSGi環境で次のエラーを取得していOSGi環境で「org.w3c.dom.Nodeの」上
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
をインポートしながら、これは、javax.imageio.metadata.IIOMetadata
のgetAsTree(String formatName)
メソッドの戻り型であるため、この呼び出しは、(「XML-APIの」バンドルから)輸入org.w3c.dom.Node
から来ていますシステムバンドル
getAsTree
メソッドが呼び出されると、これにより、org.w3c.dom.Node
が2つの異なるクラスローダーによってロードされ、したがって上記のローダー制約違反が表示されます。
このOSGi環境では、システムバンドルとは異なるバージョンのorg.w3c.dom
が提供されているため、「xml-apis」バンドルが必要です(例:org.w3c.dom.ElementTraversal
クラスは「xml-apis」バンドル私の環境では他のバンドルで使用されていますが、システムバンドルには存在しません)。
javax.imageio
パッケージは別のバンドルでは使用できないため、「xml-apis」インポートを強制することはできません。 私はまた、明示的にバージョン "0.0.0"(システムバンドル 'バージョン')をorg.w3c.dom
の呼び出し元のバンドルにインポートしようとしましたが、これはうまく機能しません。これは他のインポートで "パッケージ使用競合"使用制限としてorg.w3c.dom
)。
私はちょっと考えていません。誰も私がこの問題をどのように修正できるか考えていますか?事前にお手数をおかけしていただきありがとうございます。
私がhttpsで利用できる1束にし、XML関連のクラスの多くを移動するので、私は同様の問題を抱えていました:/ /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:残念ながら、そのバンドルを使用しても、2つの異なるクラスローダーがorg.w3c.dom.Nodeをロードしようとしていたため、エラーを解決できませんでした。ピーターの答えは以下の通りです。しかし、提案をありがとう! – arjenh