Eclipse RCP アプリケーションで Xerces 2.11.0 を使用しようとしていますが、これまでに試したすべてのことから、方法がわかりません。さらに複雑なことに、Batik 1.7 も使用しようとしています。
Xerces と xml-apis 用の独自のバンドルを作成し、Batik が使用する追加の W3C DOM インターフェイスを xml-apis バンドルに追加しました。
Batik 内で発生する最初の問題
java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal
この根本的な理由は、org.w3c.dom が JRE に含まれており、org.eclipse.osgi (system.bundle) を通じて公開されているためと思われます。これは、パッケージを提供したい他のバンドルよりも優先されるようです。
バンドルで require-bundle を使用してシステムに影響を与えようとしたり、明示的なバージョンで import-package を使用したりすると、次のようなエラーが発生します
java.lang.LinkageError: loader constraint violation: loader
(instance of org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader)
previously initiated loading for a different type with name
"org/w3c/dom/Document"
org.osgi.framework.system.packagesおよびorg.osgi.framework.bootdelegationパラメータを変更して org.w3c.dom を削除し、バンドルをosgi.framework.extensionsに追加すると、次のようなエラーが発生します
java.lang.LinkageError: loader constraint violation in interface itable
initialization: when resolving method
"javax.xml.parsers.DocumentBuilder.setErrorHandler(
Lorg/xml/sax/ErrorHandler;)V" the class loader
(instance of org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader)
of the current class, org/apache/log4j/xml/DOMConfigurator, and the
class loader (instance of <bootloader>) for resolved class,
javax/xml/parsers/DocumentBuilder, have different Class objects for the
type rrorHandler;)V used in the signature
また、java.endorsed.dirs を使用してみましたが、これにより物事が非常に早く壊れます。
私が見逃した、または間違っている可能性のあるアイデアはありますか?