Несовместимые версии Spring при развертывании на Fuse ESB (ServiceMix 4.4.1-fuse-03-06)

Мой вопрос: как я могу заставить пакет использовать версию Spring, упакованную с ним, а не версию, установленную на ESB?

У меня есть простая война веб-сервисов, которую я пытаюсь установить и запустить в Fuse ESB. WAR зависит от Spring 3.0.6, и у меня есть функция Spring 3.0.5, установленная в ESB. Я получаю сообщение об ошибке ниже после установки и попытки запустить пакет.

22:24:43 869 | ОШИБКА | л Поток консоли | РегистрацияWebAppVisitorWC | 163 - org.ops4j.pax.web.pax-web-extender-war - 1.0.3 | Исключение регистрации. Пропуская. org.springframework.beans.factory.parsing.BeanDefinitionParsingException: проблема с конфигурацией: не удалось импортировать определения bean-компонентов из URL-адреса [classpath:META-INF/spring/app-context.xml] Оскорбительный ресурс: ресурс ServletContext [/WEB-INF/cxf -servlet.xml]; вложенным исключением является org.springframework.beans.factory.BeanDefinitionStoreException: Неожиданное исключение при анализе XML-документа из ресурса пути к классу [META-INF/spring/app-context.xml]; вложенным исключением является org.springframework.beans.FatalBeanException: класс [org.springframework.jdbc.config.JdbcNamespaceHandler] для пространства имен [http://www.springframework.org/schema/jdbc] не реализует [org.springframework.beans .factory.xml.NamespaceHandler] интерфейса в org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)[73:org.springframework.beans:3.0.5.RELEASE]

Это показывает, что используется непредвиденная версия Spring. Я вижу, что 3.0.6 находится в Bundle-Classpath. Я бы подумал, что пакет должен использовать только версию Spring в папке пакета lib.

У меня также есть эта конфигурация pom, так что зависимости Maven включаются в путь к классу при развертывании WAR в ServiceMix.

                <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>

person James Rawlings    schedule 08.05.2012    source источник


Ответы (1)


Путь к классам пакета определяется пакетами Import-Packages из папки MANIFEST.MF, а не из папки /lib. Возможно, вам потребуется настроить Maven-Bundle-Plugin использовать Spring 3.0.6.

person Olivier.Roger    schedule 09.05.2012
comment
Хорошо, спасибо, я могу перейти на использование maven-bundle-plugin, и я уверен, что это правильный способ развертывания сервисов в ESB, однако я хотел изучить упаковку и установку как WAR, поскольку Fuse предлагает эту возможность. - person James Rawlings; 09.05.2012