いくつかの LDAP 操作を行う OSGi バンドルがあります。これらの操作を行うために、Apache 共有ディレクトリを使用します。バンドルをビルドするために Maven Bundle Plugin を使用しています。時間とリソースが不足しているため、pom.xml を使用する必要があります。この pom.xml には、Apache 共有ディレクトリと、それが依存する他の jar が含まれており、生成されたバンドルに含まれています。依存関係の 1 つは Xerces で、その後に Xml API が続きます。これら 2 つの jar をバンドルに含めると、Karaf は ClassCastException をスローします。
java.lang.ClassCastException: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl cannot be cast to javax.xml.parsers.DocumentBuilderFactory
さらに調査したところ、クラスjavax.xml.parsers.DocumentBuilderFactory
が 2 つの jar からロードされていることが明らかになりました。これはXml-apis.jar
、バンドルに含まれていたものと、JRE の. このクラスは からロードされているため、バンドルに含める必要はないと判断し、削除しました。ただし、次のように表示されます。rt.jar
ClassCastException
rt.jar
Xml-apis.jar
ClassNotFoundException
Caused by: java.lang.ClassNotFoundException: javax.xml.parsers.DocumentBuilderFactory not found by mybundle.ldap [149]
at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:812)[org.apache.felix.framework-3.2.2.jar:]
at org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:72)[org.apache.felix.framework-3.2.2.jar:]
at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1807)[org.apache.felix.framework-3.2.2.jar:]
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)[:1.6.0_35]
したがって、 を含めるとxml-apis.jar
、 が得られますClassCastException
。含めない場合は、ClassNotFoundException
. この問題を解決する方法はありますか? どんな助けでも大歓迎です。