У меня есть приложение, загружающее его контекст 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] не может быть разрешено к абсолютному пути к файлу - архив веб-приложений не расширен?
Как я могу исправить?