私の質問は、ESB にインストールされているバージョンではなく、パッケージ化されたバージョンの Spring を使用するようにバンドルに強制するにはどうすればよいですか?
Fuse ESB にインストールして開始しようとしている単純な Webservices WAR があります。WAR は Spring 3.0.6 に依存しており、私は Spring 3.0.5 機能を ESB にインストールしています。バンドルをインストールして開始しようとすると、以下のエラーが発生します。
22:24:43,869 | エラー | l コンソールスレッド | RegisterWebAppVisitorWC | 163 - org.ops4j.pax.web.pax-web-extender-war - 1.0.3 | 登録例外。スキップ。org.springframework.beans.factory.parsing.BeanDefinitionParsingException: 構成の問題: URL の場所から Bean 定義をインポートできませんでした [クラスパス:META-INF/spring/app-context.xml] 問題のあるリソース: ServletContext リソース [/WEB-INF/cxf -servlet.xml]; ネストされた例外は org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [META-INF/spring/app-context.xml]; ネストされた例外は org.springframework.beans.FatalBeanException: Class [org.springframework.jdbc.config.JdbcNamespaceHandler] for namespace [http://www.springframework.org/schema/jdbc] は [org.springframework.beans を実装していません] .
これは、予期しないバージョンの Spring が使用されていることを示しています。3.0.6 が Bundle-Classpath にあることがわかります。バンドルは、バンドル lib フォルダー内のバージョンの Spring のみを使用する必要があると考えていました。
WAR を ServiceMix にデプロイするときに Maven の依存関係がクラスパスに含まれるように、この pom 構成もあります。
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<classpathLayoutType>repository</classpathLayoutType>
</manifest>
</archive>
<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
<webResources>
<resource>
<directory>src/main/resources</directory>
<targetPath>WEB-INF</targetPath>
<includes>
<include>**.*</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>