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クラスは、jar に埋め込まれたアーティファクトwoodstox wstx-aslにあるため、この例外はスローされません。このアーティファクトを別のバンドルに入れようとしましたが、同じエラーが発生します。

ここでの問題は何ですか?

このディスカッションでは、クラスローダーの問題であると述べていますが、解決策が見つかりません。

ありがとうございました

4

1 に答える 1

2

あなたが言及したメーリングリストのスレッドで、StAXをバンドルに埋め込むのではなく、OSGifiedバージョンのStAX APIと実装(Woodstox)を使用する1つのソリューションについてすでに説明しました。

StAXをバンドルに埋め込むことが難しい要件である場合は、org.apache.axiom.om.util.StAXUtilsの静的setFactoryPerClassLoaderメソッドを呼び出すバンドルアクティベーターを追加して、そのプロパティをfalseに設定する必要があります。少なくともこれは、Axiomを介してStAXを使用するすべてのコード(Axis2を含む)で機能するはずですが、StAXと直接対話するコードがある場合は、問題が発生する可能性があります。

于 2012-04-10T19:24:30.923 に答える