web-dev-qa-db-fra.com

Spring - applicationContext.xml ne peut pas être ouvert car il n'existe pas

J'ai une application Spring MVC et un problème avec les tests JUnit combinés avec le fichier applicationContext.xml.

Dans ma classe de test JUnit, j'écris:

final ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
service = (TestServiceImpl) context.getBean("testServiceImpl");

L'erreur que j'obtiens est que aplicationContect.xml est introuvable:

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

Mais il se termine dans le dossier WEB-INF. Ici vous pouvez voir l'arborescence de mon projet avec le fichier applicationContext.xml: http://img28.imageshack.us/img28/2576/treexp.png

Alors, qu'est-ce qui ne va pas ici? Pourquoi le fichier n'existe-t-il pas pour le test JUnit?

Merci d'avance. Meilleures salutations.

33
Tim

Vous devez conserver vos fichiers Spring dans un autre dossier, marqué comme "source" (tout comme "src" ou "ressources").

WEB-INF n'est pas un dossier source, il ne sera donc pas inclus dans le chemin de classe (c'est-à-dire que JUnit n'y recherchera rien).

38
biasedbit

Le ClassPathXmlApplicationContext ne va pas trouver le applicationContext.xml dans votre WEB-INF dossier, ce n'est pas sur le chemin de classe. Vous pouvez copier le contexte de l'application dans votre chemin de classe (le mettre sous src/test/resources et laissez Maven le recopier) lors de l'exécution des tests.

8
Nathan Hughes

J'ai eu la même erreur. Je l'ai résolu en déplaçant le fichier applicationContext.xmldans un

sous-dossier du dossier src. par exemple:

context = new ClassPathXmlApplicationContext("/com/ejemplo/dao/applicationContext.xml");
8
juan

Si vous utilisez maven, créez un répertoire appelé resources dans le répertoire principal, puis copiez votre applicationContext.xml dans ça.

Depuis votre Java appel de code:

ApplicationContext appCtx = new ClassPathXmlApplicationContext("applicationContext.xml");
8
duracell

J'ai également trouvé ce problème. Pour résoudre ce problème, copiez/collez ce fichier partout et exécutez-le, un fichier à la fois. Enfin, il a compilé et exécuté avec succès, puis supprimez les fichiers inutiles. L'endroit correct dans ma situation est: enter image description here

C'est sous le chemin/src/(j'utilise Intellij Idea comme IDE). Les autres Java se trouvent sous/src/com/package/path

J'espère que ça aide.

5
BillOverFlow

Clique sur le src/main/Java dossier et faites un clic droit et créez le fichier xml. Si vous créez le application.xml fichier dans un sous-package autre que /, ça ne marchera pas.

Sachez que votre structure ressemble à ceci

package/
|  subpackage/
   | Abc.Java
   | Test.Java

/application.xml
2
Rudra Pratap Singh

Je l'ai résolu en déplaçant le fichier spring-context.xml dans un dossier src. Contexte ApplicationContext = new ClassPathXmlApplicationContext ("spring-context.xml");

1
Razi

Je l'ai corrigé en ajoutant applicationContext.xml dans jar/target/test-classes pour le projet Maven. Et utilise

        XmlBeanFactory bf = new XmlBeanFactory( new ClassPathResource(
                "/applicationContext.xml", getClass() ) )

au lieu de

        XmlBeanFactory bf = new XmlBeanFactory( new ClassPathResource(
                "/WEB-INF/applicationContext.xml", getClass() ) )
1
Jackie Lee

Cela m'arrive de temps en temps lors de l'utilisation d'Eclipse Pour une raison quelconque (bug Eclipse ??), le paramètre "exclu" obtient une valeur *. * (Chemin de génération de mon dossier de ressources)

Changez simplement l'exclusion en aucune (voir rectangle rouge vs rectangle vert) J'espère que cela aidera quelqu'un à l'avenir parce que c'était très frustrant à trouver.

excluded

1
user648026

Veuillez faire ce code - cela a fonctionné

 AbstractApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");

o/w: Supprimer la classe de méthode principale et la recréer lors de la recréation, veuillez décocher la méthode abstraite héritée

0
Umesh Mundhe
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)
0
Amit

J'utilise Netbeans, j'ai résolu mon problème en mettant le fichier dans: Paquet par défaut Autres sources, puis je l'ai appelé de cette façon:

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

dossier de ressources

0
Eduardo Carrillo

Au printemps, tous les fichiers source se trouvent dans src/main/Java. De même, les ressources sont généralement conservées dans src/main/resources. Conservez donc votre fichier de configuration Spring dans le dossier des ressources.

Assurez-vous d'avoir également l'entrée ClassPath pour vos fichiers dans src/main/resources.

Dans .classpath, vérifiez les 2 lignes suivantes. S'ils manquent, ajoutez-les.

<classpathentry path="src/main/Java" kind="src"/>
<classpathentry path="src/main/resources" kind="src" />

Donc, si vous avez tout en place, le code ci-dessous devrait fonctionner.

ApplicationContext ctx = new ClassPathXmlApplicationContext ("Spring-Module.xml");

0
Shashesh

J'ai placé le fichier applicationContext.xml dans le dossier src/main/Java et cela a fonctionné

0
Chetan Punjabi

En travaillant avec Maven, j'ai eu le même problème, puis j'ai mis le fichier XML dans src/main/Java chemin et cela a fonctionné.

ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
0
Kushagra Sharma

Vous devez réellement comprendre le ApplicationContext. C'est une interface et elle aura différentes implémentations basées sur la configuration.

Comme vous utilisez new ClassPathXmlApplicationContext("applicationContext.xml");, veuillez faire attention au côté droit initial, il est dit ClassPathXmlApplicationContext, donc le XML doit être présent dans le chemin de classe. Faites donc glisser votre applicationContext.xml où qu'il se trouve dans le dossier src.

Gist: new ClassPathXmlApplicationContext comme nom [ClassPathXml] recherchera le fichier xml dans le dossier src de votre projet, faites donc glisser votre fichier xml uniquement là-bas.

ClassPathXmlApplicationContext— Charge une définition de contexte à partir d'un fichier XML situé dans le chemin de classe, traitant les fichiers de définition de contexte comme des ressources de chemin de classe.

FileSystemXmlApplicationContext— Charge une définition de contexte à partir d'un fichier XML dans le système de fichiers.

XmlWebApplicationContext— Charge les définitions de contexte à partir d'un fichier XML contenu dans une application Web.

0
Vishwa Ratna