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/Attr;" 現在のクラス 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 システムでのみ発生するため、この問題を解決するためのより積極的なアプローチを好みません。
あなたの 1 人がそのような問題に遭遇し、それを修正する方法、または少なくとも問題の核心にたどり着く方法を知っていますか?