2013-09-03 1 views
0

Пусть у меня есть два проекта:Как получить доступ к контексту Spring из зависимого проекта?

ProjectA and ProjectB 
ProjectA depends on ProjectB 

И у меня есть context.xml расположено на ProjectB/мишени/тест-классах/context.xml. Теперь мне нужно отключить контекст от ProjectA. В projectB У меня есть класс accesser:

Class ContextAccessor{ 
    ApplicationContext context = new 
     ClassPathXmlApplicationContext("context.xml"); 

    public static ApplicationContext getContext(){ 
     return context; 
    } 
} 

Хотя в Projecta, я пытаюсь получить контекст с помощью:

ContextAccessor.getContext(); 

, но он бросает исключение с сообщением:

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException  parsing XML document from class path resource [context.xml]; nested exception is java.io.FileNotFoundException: class path resource [context.xml] cannot be opened because it does not exist 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341) 
at 

Просьба дать предложения. Признательность.

+0

Вы добавили классы и ресурсы от projectB путь к классам проекта А? –

+0

@SotiriosDelimanolis: Нет. Что мне делать, если я не хочу менять конфигурацию проекта? – Edmond

ответ

0

я, наконец, решить эту проблему с помощью:

Class ContextAccessor{ 
    ApplicationContext context = new 
     FileSystemXmlApplicationContext(this.getClass().getProtectionDomain(). 
     getCodeSource().getLocation().getPath()); 

    public static ApplicationContext getContext(){ 
     return context; 
    } 
} 

Предполагая, что контекст на ProjectB/цели/классы/context.xml

0

Вы должны убедиться, что ProjectB (предположим, что он упакован как банка) в pathpath ProjectA. обратитесь к here, если вы используете Maven, чтобы понять, как это можно сделать.

Как только он находится в пути к классу, вы должны создать контекст с приведенным выше кодом. Также убедитесь, что местоположение context.xml правильно передано конструктору, обратитесь к JavaDoc за ClassPathXmlApplicationContext.

+0

ProjectB находится в зависимостях ProjectA, но не classPath. Существует ли без изменений проектная конфигурация? – Edmond

+0

Я не могу подумать о другом способе, с помощью которого вы можете получить доступ к файлу pom, не добавляя банку ProjectB в pathpath ProjectA. , но почему вы не можете вносить изменения в конфигурацию pom? – vasanth

0

Я думаю, вы не добавили ProjectB в зависимости от проекта ProjectA. Добавьте его и повторите попытку.

+0

Я проверил пом. ProjectB существует в зависимостях ProjectA. В противном случае я не смог бы использовать ContextAccessor, верно? – Edmond