2015-12-03 3 views
3

У меня есть приложение, загружающее его контекст Spring с конфигурацией XML.Невозможно загрузить отображение BeanIO из файла JAR в приложении WAR

Контекстные файлы хранятся в пути класса jar (в каталоге META-INF/context).

Представляя новый bean-компонент, я хочу загрузить файл сопоставления beanio из пути к одному и тому же архиву. С Tomcat, работающим в Eclipse, все это работает как прелесть, но когда я разворачиваю WAR-файл в нашу среду QA, я запускаю приложение.

Позвольте мне идти код:

public class BeanIoParser implements Parser, Iterator<Message>, InitializingBean 
{ 
    private StreamFactory streamFactory; 

    private Resource resourceMapping; //Injected via Context 

    @Override 
    public void afterPropertiesSet() throws Exception 
    { 
     streamFactory = StreamFactory.newInstance(); 
     streamFactory.load(resourceMapping.getFile()); //boom here 
    } 
} 

, а затем контекст

<bean id="messagesParser" class="it.acme.BeanIoParser" scope="prototype"> 
    <property name="resourceMapping" value="classpath:META-INF/mappings/messages-beanio.xml" /> 
</bean> 

А потом что? Умм ... Я дважды проверил встроенный файл jar, сначала распакуя файл войны. Все это соответствует.

Я правильно вижу файл messages-beanio.xml.

Но когда я запустить приложение я получаю следующее первопричину:

java.io.FileNotFoundException: путь класса ресурса [META-INF/отображения/сообщения-beanio.xml] не может быть решен к абсолютному путь, потому что он не находится в файловой системе: jar: файл:/C: /Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/temp/11-app/WEB-INF/lib/app-3.0. 0.20151105.jar! /META-INF/mappings/messages-beanio.xml

Я также пробовал другой способ, используя classpath* (потому что мы столкнулись с этой проблемой при загрузке контекста Spring из нескольких файлов jar)

Так что, если мое заявление боб становится

<property name="resourceMapping" value="classpath*:META-INF/mappings/messages-beanio.xml" />  

Моя ошибка становится

java.io.FileNotFoundException: ServletContext ресурс [/classpath*:META-INF/mappings/messages-beanio.xml] не может быть разрешено к абсолютному пути к файлу - архив веб-приложений не расширен?

Как я могу исправить?

ответ

1

Решенный по-разному. Я программно создаю экземпляр ClasspathResource с пуском, начинающимся с META-INF, а не classpath:

Смежные вопросы