2

いくつかの 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.jarClassCastExceptionrt.jarXml-apis.jarClassNotFoundException

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. この問題を解決する方法はありますか? どんな助けでも大歓迎です。

4

3 に答える 3

2

パッケージをインポートしますjavax.xml.parsers

于 2012-11-30T08:27:16.743 に答える
0

問題が解決しました!!(少なくとも私にとっては)

このリンクで問題の非常に良い説明を見つけることができます: Java/Maven で "Xerces hell" を処理しますか?

ご覧のとおり、実際には Xerces の互換性の問題です。Xerces を使用していなくても、Xerces を使用するライブラリを使用している可能性があります。

私の場合の解決策は、古いバージョンの xerces (lucene-xercesImpl) を使用し、xml-apis または xerces への参照を除外することでした。

<properties>
   <ver.jena>2.10.1</ver.jena>
   <ver.jena-sdb>1.3.6</ver.jena-sdb>
   <ver.h2>1.3.173</ver.h2>
</properties>
<dependencies>
   <dependency>
      <groupId>org.apache.jena</groupId>
      <artifactId>jena-sdb</artifactId>
      <version>${ver.jena-sdb}</version>
      <exclusions>
         <exclusion>
            <groupId>xml-apis</groupId>
            <artifactId>xml-apis</artifactId>
         </exclusion>
         <exclusion>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
         </exclusion>
      </exclusions>
   </dependency>
   <dependency>
      <groupId>org.apache.lucene</groupId>
      <artifactId>lucene-xercesImpl</artifactId>
      <version>3.5.0</version>
   </dependency>
   <dependency>
      <groupId>org.apache.jena</groupId>
      <artifactId>apache-jena-libs</artifactId>
      <type>pom</type>
      <version>${ver.jena}</version>
      <exclusions>
         <exclusion>
            <artifactId>commons-codec</artifactId>
            <groupId>commons-codec</groupId>
         </exclusion>
         <exclusion>
            <groupId>org.apache.jena</groupId>
            <artifactId>jena-tdb</artifactId>
         </exclusion>
     </exclusions>
   </dependency>

この助けを願っています!

于 2013-09-17T05:59:58.007 に答える