Ответ 1
Вы должны хранить ваши файлы Spring в другой папке, помеченной как "источник" (например, "src" или "resources" ).
WEB-INF не является исходной папкой, поэтому он не будет включен в путь к классам (т.е. JUnit ничего там не ищет).
У меня есть приложение Spring MVC и проблема с тестами JUnit в сочетании с файлом applicationContext.xml.
В моем тестовом классе JUnit я пишу:
final ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
service = (TestServiceImpl) context.getBean("testServiceImpl");
Ошибка, которую я получаю, заключается в том, что aplicationContect.xml не найден:
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [applicationContext.xml]; nested exception is java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not exist
Но он выходит из папки WEB-INF. Здесь вы можете увидеть дерево моего проекта с файлом applicationContext.xml: http://img28.imageshack.us/img28/2576/treexp.png
Итак, что здесь не так? Почему файл не существует для теста JUnit?
Спасибо заранее и с наилучшими пожеланиями.
Вы должны хранить ваши файлы Spring в другой папке, помеченной как "источник" (например, "src" или "resources" ).
WEB-INF не является исходной папкой, поэтому он не будет включен в путь к классам (т.е. JUnit ничего там не ищет).
ClassPathXmlApplicationContext
не найдет applicationContext.xml
в вашей папке WEB-INF
, но не в пути к классам. Вы можете скопировать контекст приложения в свой путь к классу (возможно, поставить его под src/test/resources
и позволить Maven скопировать его) при запуске тестов.
Я получил ту же ошибку.
Я решил переместить файл applicationContext.xml
в
в папке src
. например:
context = new ClassPathXmlApplicationContext("/com/ejemplo/dao/applicationContext.xml");
Если вы используете maven, создайте в главном каталоге каталог с именем resources
, а затем скопируйте его applicationContext.xml
в него.
Из кода java-кода:
ApplicationContext appCtx = new ClassPathXmlApplicationContext("applicationContext.xml");
Я тоже нашел эту проблему. Чтобы решить эту проблему, нужно копировать/вставлять этот файл везде и запускать по одному файлу за раз. Наконец он скомпилирован и успешно запущен, а затем удалите ненужные. Правильное место в моей ситуации:
Это в /src/path (я использую Intellij Idea в качестве IDE). Другие исходные файлы Java находятся в /src/com/package/path
Надеюсь, это поможет.
Нажмите на папку src/main/java
и щелкните правой кнопкой мыши и создайте XML файл. Если вы создадите файл application.xml
в подпакете, отличном от /
, он не будет работать.
Знай, что твоя структура выглядит так
package/
| subpackage/
| Abc.java
| Test.java
/application.xml
Я решил переместить файл spring -context.xml в папку src. ApplicationContext context = new ClassPaспасибоmlApplicationContext ( "spring -context.xml" );
Это случается со мной время от времени при использовании eclipse. По какой-то причине (ошибка eclipse??) параметр "exclude" получает значение *. * (Путь сборки для моей папки ресурсов)
Просто измените исключение на нет (см. Красный прямоугольник против зеленого прямоугольника). Я надеюсь, что это поможет кому-то в будущем, потому что это было очень сложно найти.
Я исправил это, добавив applicationContext.xml в jar/target/test-classes для проекта Maven. И использовать
XmlBeanFactory bf = new XmlBeanFactory( new ClassPathResource(
"/applicationContext.xml", getClass() ) )
вместо
XmlBeanFactory bf = new XmlBeanFactory( new ClassPathResource(
"/WEB-INF/applicationContext.xml", getClass() ) )
Я поместил applicationContext.xml в папку src/main/java и работал
В Spring все исходные файлы находятся внутри src/main/java. Аналогично, ресурсы обычно хранятся внутри src/main/resources. Поэтому сохраните конфигурационный файл Spring внутри папки ресурсов.
Убедитесь, что у вас есть запись ClassPath для ваших файлов внутри src/main/resources.
В .classpath проверьте следующие 2 строки. Если они отсутствуют, добавьте их.
<classpathentry path="src/main/java" kind="src"/>
<classpathentry path="src/main/resources" kind="src" />
Итак, если у вас есть все на месте, то приведенный ниже код должен работать.
ApplicationContext ctx = new ClassPaспасибоmlApplicationContext ( "Spring -Module.xml" );
Пожалуйста, сделайте этот код - он сработал
AbstractApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");
o/w: Удалить основной класс метода и воссоздать его во время воссоздания, пожалуйста, снимите флажок Унаследованный абстрактный метод его работы
Я использую Netbeans, я решил свою проблему, поместив файл в: Other Sources default package, затем я назвал его следующим образом:
ApplicationContext context =new ClassPaспасибоmlApplicationContext("bean.xml");
Во время работы с Maven возникла та же проблема, после чего я поместил файл XML в путь src/main/java
и это сработало.
ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
Вы на самом деле должны понимать ApplicationContext
. Это интерфейс, и он будет иметь различные реализации в зависимости от конфигурации.
Как вы используете new ClassPaспасибоmlApplicationContext("applicationContext.xml");
Пожалуйста, обратите внимание на начальную правую часть, это говорит ClassPaспасибоmlApplicationContext, поэтому XML должен присутствовать в пути к классам. Поэтому перетащите ваше applicationContext.xml, где бы оно ни находилось, в папку src.
Суть: новый ClassPaспасибоmlApplicationContext в качестве имени [ClassPaспасибоml] будет искать xml- файл в папке src вашего проекта, поэтому перетащите туда только xml файл.
P ClassPaспасибоmlApplicationContext
загружает определение контекста из файла XML, расположенного в пути к классам, обрабатывая файлы определения контекста как ресурсы пути к классам.
FileSystemXmlApplicationContext
загружает определение контекста из файла XML в файловой системе.
Ml XmlWebApplicationContext
загружает определения контекста из файла XML, содержащегося в веб-приложении.
just change the containing package of your applicationContext.xml file.
applicationContext.xml must be in src package not in your project package.
e.g.
src(main package)
com.yourPackageName(package within src)
classes etc.
applicationContext.xml(within src but outside of yourPackage or we can say
parallel to yourPackage name)