Spring FileSystemXmlApplicationContext не находит файл конфигурации bean-компонента и переходит в ошибку

Я пытаюсь сделать следующий пример Spring «Hello World», в котором используется FileSystemXmlApplicationContext в качестве реализации интерфейса ApplicationContext.

Эта реализация должна принимать полный путь конфигурации компонента XML в качестве параметра конструктора, как в предыдущем примере:

ApplicationContext context = new FileSystemXmlApplicationContext("C:/Users/ZARA/workspace/HelloSpring/src/Beans.xml");

Я использую Linux, и мой файл конфигурации Beans находится по следующему пути: /home/andrea/Documents/ws/myapplicationcontextexample/src/main/java/Beans.xml, поэтому в моем коде есть:

ApplicationContext context = new FileSystemXmlApplicationContext("/home/andrea/Documents/ws/myapplicationcontextexample/src/main/java/Beans.xml");

Проблема в том, что когда я пытаюсь запустить свое приложение, в консоли STS\Eclipse у меня появляется следующее сообщение об ошибке (кажется, что файл не найден):

INFO: Loading XML bean definitions from file [/home/andrea/Documents/ws/myapplicationcontextexample/home/andrea/Documents/ws/myapplicationcontextexample/src/main/java/Beans.xml]
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [/home/andrea/Documents/ws/myapplicationcontextexample/home/andrea/Documents/ws/myapplicationcontextexample/src/main/java/Beans.xml]; nested exception is java.io.FileNotFoundException: home/andrea/Documents/ws/myapplicationcontextexample/src/main/java/Beans.xml (File o directory non esistente)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436)
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84)
    at org.andrea.myexample.myapplicationcontextexample.MainApp.main(MainApp.java:14)
Caused by: java.io.FileNotFoundException: home/andrea/Documents/ws/myapplicationcontextexample/src/main/java/Beans.xml (File o directory non esistente)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at org.springframework.core.io.FileSystemResource.getInputStream(FileSystemResource.java:113)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
    ... 13 more

Почему? Как я могу решить?

Tnx

Андреа


person AndreaNobili    schedule 23.01.2013    source источник
comment
Похоже, что он использует ваш домашний каталог, а затем добавляет к нему дополнительную информацию о пути. Попробуйте изменить код следующим образом: ApplicationContext context = new FileSystemXmlApplicationContext(src/main/java/Beans.xml);   -  person CodeChimp    schedule 23.01.2013
comment
Хорошо, теперь все работает... но зачем автоматически использовать этот путь: /home/andrea/Documents/ws/myapplicationcontextexample/?   -  person AndreaNobili    schedule 23.01.2013
comment
В java есть свойство системного уровня, которое, как мне кажется, называется user.dir и является текущим рабочим каталогом для вашего приложения. В случае Eclipse я считаю, что по умолчанию используется папка проекта. Я полагаю, вы можете изменить каталог запуска в настройках запуска Eclipse.   -  person CodeChimp    schedule 23.01.2013


Ответы (1)


ПРИМЕЧАНИЕ. Обычные пути всегда будут интерпретироваться как относящиеся к текущему рабочему каталогу виртуальной машины, даже если они начинаются с косой черты. (Это соответствует семантике контейнера сервлетов.) Используйте явный префикс "file:", чтобы указать абсолютный путь к файлу.

Ссылка: http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/context/support/FileSystemXmlApplicationContext.html

person Paul Cunningham    schedule 14.06.2013
comment
gr8 это работало на Ubuntu. раньше мне было интересно, почему FileSystemXmlApplicationContext работает в Windows, но не в Linux!!! - person Vijay; 17.10.2014