【发布时间】:2012-11-17 17:58:28
【问题描述】:
我有一个执行一些 LDAP 操作的 OSGi 包。它使用 Apache 共享目录来执行这些操作。我正在使用 Maven Bundle Plugin 来构建我的包。由于时间和资源不足,我不得不在生成的包中使用 pom.xml,其中包括 Apache 共享目录和它所依赖的其他 jar。依赖项之一是 Xerces,然后是 Xml api。当我将这两个 jar 包包含在包中时,Karaf 会抛出 ClassCastException:
java.lang.ClassCastException: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl cannot be cast to javax.xml.parsers.DocumentBuilderFactory
进一步调查显示,类 javax.xml.parsers.DocumentBuilderFactory 是从两个 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。有没有办法解决这个问题?任何帮助将不胜感激。
【问题讨论】:
标签: java osgi classloader apache-karaf