Unable to import Spring bean definition file using relative path

Я новичок в Spring и унаследовал проект Spring, который имел всю конфигурацию XML в ProjectName/WebContent/WEB-INF/applicationContext.xml. Я пытаюсь разбить конфигурацию на различные компоненты, чтобы было проще подставлять такие вещи, как DataSources и конфигурация Hibernate при тестировании.

Вот структура моего файла:

ProjectName
  ->WebContent
      ->WEB-INF
          ->applicationContext.xml
          ->spring-datasource.xml
          ->spring-hibernate-properties.xml
          ->spring-persistence.xml
  ->test
      ->us.mn.k12... (Java pkgs with JUnit tests)
      ->spring-hsqldb-datasource.xml
      ->spring-test-bean-locations.xml
      ->spring-test-hibernate-properties.xml
  ->src
      ->us.mn.k12... (Java pkgs with production code)

В WEB-INF/applicationContext.xml я импортирую следующее:

<import resource="spring-datasource.xml"/> <!-- Production datasource -->
<import resource="spring-hibernate-properties.xml"/> <!-- Production hibernate properties -->
<import resource="spring-persistence.xml"/> <!--  DAO's, hibernate .hbm.xml mapping files -->

Приложение работает с вышеуказанной конфигурацией.

Мои тесты JUnit работают с использованием DbUnit и базы данных HSQLDB in-memory. Поэтому мой тест JUnit ссылается на spring-test-bean-locations.xml, в котором есть следующее:

<import resource="spring-hsqldb-datasource.xml"/> <!-- HSQLDB datasource for test -->
<import resource="../WebContent/WEB-INF/spring-persistence.xml"/>  <!--  Production DAO's, hibernate .hbm.xml mapping files -->
<import resource="spring-test-hibernate-properties.xml"/> <!-- Hibernate properties for test -->

Таким образом, я могу указать тестовый источник данных и свойства hibernate, но повторно использовать производственный файл отображения для DAO и т. д. Однако при запуске теста JUnit я получаю ошибку. Вот соответствующая часть исключения:

Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from relative location [../WebContent/WEB-INF/spring-persistence.xml]
Offending resource: class path resource [spring-test-bean-locations.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [../WebContent/WEB-INF/spring-persistence.xml]; nested exception is java.io.FileNotFoundException: class path resource [../WebContent/WEB-INF/spring-persistence.xml] cannot be opened because it does not exist

Теперь, если я перемещу spring-persistence.xml в /test, чтобы не использовать относительный путь, и ссылаюсь на него с помощью , то тесты выполняются нормально. Поэтому я думаю, что содержимое моих XML файлов в порядке, но я не правильно импортирую с относительным путем.

Есть ли что-то очевидное, что я делаю неправильно при импорте с относительным путем? И, возможно, более важный вопрос: похоже ли это на разумную стратегию разбиения applicationContext.xml на компоненты, чтобы облегчить тестирование?

Спасибо!

9
задан Sean Patrick Floyd 21 December 2011 в 22:14
поделиться