# Spring ApplicationContext.xml lokalisieren



## Tarantoga (13. Apr 2011)

Hallo,
ich verwende NetBeans und wenn ich Beans instanzieren möchte, die im File applicationContext.xml in WEB-INF deklariert sind, bekomme ich von ClassPathXmlApplicationContext eine Exception, dass dieses File nicht am Classpath ist.
Gut das mag stimmen, aber warum gibt Netbeans die Konfigurationsfiles dann standardmäßig ins WEB-INF Verzeichnis?
Gibts eine andere Möglichkeit die Beans zu instanzieren, oder muss ich die Konfiguration in einen anderen Ordner geben?
Bzw. kann ich den ClassPathXmlApplicationContext irgendwie auf das WEB-INF Verzeichnis verweisen.
Dankeschön schon im Voraus.
LG


----------



## Noctarius (13. Apr 2011)

WEB-INF ist das Standard-Verzeichnis in Webapplications (z.B. für den Apache Tomcat). Damit dürfte dann aber der ClassPathXmlApplicationContext nicht so ohne weiteres klappen. Für Webapps sollte man den WebappApplicationContext (oder so ähnlich nutzen) oder besser gleich den den ContextListener.

Nutzt du eine Webapp oder hast du eventuell das Projekt als Webapp erstellt, dass Netbeans meint das AppContext-XML sollte im WEB-INF Verzeichnis liegen?


----------



## Tarantoga (14. Apr 2011)

Ja, ist eine WebApp, ich werde mal deine Vorschläge versuchen.
An und für sich habe ich ja im DeploymentDescriptor auf diese Dateien verwiesen.
Also ich probiers jetzt einfach nochmal.
Dankeschön!

EDIT:
Also den Listener hab ich definiert, aber trotzdem findet meine MainClass das xmlFile nicht.

Die MainClass

```
...public static void main (String[] args) throws Exception {

       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

       SequenceGenerator generator = (SequenceGenerator) context.getBean("sequenceGenerator");
...
```
wirft diese Exception:

...
Caused by: java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not exist...

Im ApplicationContext ist der "SequenceGenerator" definiert.

Die relavanten Parts von web.xml sind wie folgt:
...
 <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
...



An was kann es liegen, das es nicht läuft?


----------



## maki (14. Apr 2011)

/WEB-INF/applicationContext.xml liegt auch nicht im Classpath.

Spring hat doch schon einen AppContextLoader für WebApps, warum baust du deinen eigenen?


----------



## Tarantoga (14. Apr 2011)

Ich weis dass WEB-INF nicht im Classpath liegt.
Nur verstehe ich nicht warum Netbeans per default Konfigurationsfiles anlegt die man nicht findet.

Es muss ja dann an ClassPathXmlApplicationContext liegen (oder?), da es ja eben nicht am ClassPath liegt, aber wie kann ich das Bean sonst Instanzieren?
Hab ja an den Einstellungen nichts geändert. Nur das Bean deklariert und kanns jetzt nicht benutzen.


----------



## maki (14. Apr 2011)

Kenne Netbeans nicht, kannst ja mal die Entwickler fragen 

Wenn du es selber machen möchtest wäre eben der ContextListener die bessere Wahl und die Datei in den Classpath zu verschieben sollte ja wohl möglich sein.


----------



## mvitz (14. Apr 2011)

Seit wann hat ne Webapp eigentlich ne main? Bei einer Webapp ist es doch vollkommen richtig, den Spring Application Context unter WEB-INF abzulegen, aber dann braucht man auch keine Main...


----------



## Noctarius (14. Apr 2011)

Das wäre jetzt auch meine Frage gewesen, wieso eine static main in einer Webapp? Oo


----------



## Tarantoga (15. Apr 2011)

Wollte es nur einmal ausprobieren, ihr habt recht, in der WebApp brauche ich sie nicht.

Hab sie jetzt mit FileSystemXmlApplicationContext instanziert und es funktioniert.

LG

EDIT:

Eine Frage hätte ich noch. (Es scheitert bei mir doch immer an banalen Dingen -_-)

Und zwar habe ich eine Spring-Security XML-Datei angelegt. (Ebenfalls in WEB-INF)

Im DeploymentDescriptor hab ich auch Filter definiert, etc. und alles funktioniert bis hierhin.

Wenn ich jedoch über <context-param> -> <param-value> die Location von security.xml definere entsteht ein Fehler beim deployen.
In den Tutorials steht nirgends etwas über dieses Problem. Ich werd echt schon verrückt.


----------



## FArt (15. Apr 2011)

Tarantoga hat gesagt.:


> Hab sie jetzt mit FileSystemXmlApplicationContext instanziert und es funktioniert.



Funktioniert (jetzt zufällig) ist aber falsch. Noctarius hat dir gesagt wie es geht. Das sollte zusammen mit der Doku reichen.


----------

