我有一个执行一些 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
. 有没有办法解决这个问题?任何帮助,将不胜感激。