2

我尝试使用 maven-bundle-plugin 将 axis2 (v. 1.5.1) 及其依赖项嵌入到 osgi 包中。在我的项目的 pom 中,我有以下标签:

<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>

为了将所有axis2依赖项(和传递的依赖项)嵌入到最终的jar文件中。jar 文件可以在 Felix 中成功安装,但问题是当另一个包尝试使用该 jar 类中的方法时,我得到了异常:

javax.xml.stream.FactoryConfigurationError: Requested factory 
    com.ctc.wstx.stax.WstxInputFactory cannot be located.  
    Classloader =sun.misc.Launcher$AppClassLoader@9cab16

该类com.ctc.wstx.stax.WstxInputFactory位于woodstox wstx-asl嵌入到 jar 中的工件中,因此不应抛出此异常。我也尝试将此工件放入另一个包中,但发生相同的错误。

这里有什么问题?

这个讨论中,他们说这是一个类加载器问题,但我找不到任何解决方案。

谢谢

4

1 回答 1

2

在您提到的邮件列表线程中,我已经描述了一种解决方案,它不是将 StAX 嵌入到包中,而是使用 StAX API 和实现 (Woodstox) 的 OSGified 版本。

如果将 StAX 嵌入到包中是一项硬要求,那么您需要添加一个包激活器,该激活器调用 org.apache.axiom.om.util.StAXUtils 中的静态 setFactoryPerClassLoader 方法将该属性设置为 false。至少这应该适用于通过 Axiom 使用 StAX 的任何代码(包括 Axis2),但如果有代码直接与 StAX 交互,您可能仍然会遇到问题。

于 2012-04-10T19:24:30.923 回答