Spring - applicationContext.xml无法打开,因为它不存在

时间:2010-10-11 15:55:36

标签: spring-mvc junit

我有一个Spring MVC应用程序,并且JUnit测试与文件applicationContext.xml结合存在问题。

在我的JUnit测试类中,我写道:

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

我得到的错误是找不到aplicationContect.xml:

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

但它会退出WEB-INF文件夹。在这里,您可以使用applicationContext.xml文件查看项目树: http://img28.imageshack.us/img28/2576/treexp.png

那么,这里有什么问题?为什么JUnit测试不存在该文件?

提前谢谢你&最诚挚的问候。

21 个答案:

答案 0 :(得分:37)

您应该将Spring文件保存在另一个文件夹中,标记为“source”(就像“src”或“resources”)。

WEB-INF不是源文件夹,因此它不会包含在类路径中(即JUnit不会在那里查找任何内容)。

答案 1 :(得分:8)

ClassPathXmlApplicationContext不会在applicationContext.xml文件夹中找到WEB-INF,它不在类路径中。您可以在运行测试时将应用程序上下文复制到类路径中(可以将其置于src/test/resources下并让Maven将其复制)。

答案 2 :(得分:8)

如果您使用maven,请在主目录中创建一个名为resources的目录,然后将applicationContext.xml复制到其中。

从你的java代码调用:

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

答案 3 :(得分:7)

我得到了同样的错误。 我解决了它在

中移动文件applicationContext.xml

src文件夹的子文件夹。 e.g:

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

答案 4 :(得分:4)

我也发现了这个问题。解决这个问题的方法是在任何地方复制/粘贴此文件并一次运行一个文件。最后编译并成功运行,然后删除不必要的。我的情况正确的地方是: enter image description here

这是在/ src / path下(我使用Intellij Idea作为IDE)。其他java源文件位于/ src / com / package / path

希望有所帮助。

答案 5 :(得分:2)

enter image description here

几个小时以来,我一直在为这个问题而苦苦挣扎,因为我将该文件放在资源文件夹下,但是它没有帮助我,最后我意识到了自己的错误。 将其直接放在src / main / java下。

答案 6 :(得分:1)

我解决了将文件spring-context.xml移动到src文件夹中的问题。 ApplicationContext context = new ClassPathXmlApplicationContext(“spring-context.xml”);

答案 7 :(得分:1)

我的解决方案
如果您没有文件夹WEB-INF,请将文件applicationContext.xml 放入文件夹source(src)。 enter image description here


然后 Java 项目 可以读取文件 applicationContext.xml -> getBean -> 执行您的业务。

答案 8 :(得分:1)

使用eclipse时,我不时会遇到这种情况 出于某种原因(eclipse bug ??),“excluded”参数获取值*。*(我的资源文件夹的构建路径)

只需将排除更改为无(请参阅红色矩形与绿色矩形) 我希望这对未来的人有所帮助,因为找到它是非常令人沮丧的。

excluded

答案 9 :(得分:1)

我通过将applicationContext.xml添加到Maven项目的jar / target / test-classes中来修复它。并使用

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

而不是

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

答案 10 :(得分:1)

单击src/main/java文件夹,然后右键单击并创建xml文件。如果您在application.xml以外的子包中创建/文件,则无效。

知道你的结构看起来像这样

package/
|  subpackage/
   | Abc.java
   | Test.java

/application.xml

答案 11 :(得分:0)

enter image description here解决办法是将xml文件放在resources文件夹(src->main->resources)中,使用这个对象创建new ClassPathXmlApplicationContext("applicationContext.xml");

答案 12 :(得分:0)

我在处理 Maven 项目时遇到了同样的问题,所以我在 spring.xml 中重新创建了配置文件 src/main/java,它对我有用。

答案 13 :(得分:0)

您的模块/src/applicationContext.xml

val context = ClassPathXmlApplicationContext("applicationContext.xml")

检查目录路径,默认路径为/src/而不是/

GL

答案 14 :(得分:0)

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)

答案 15 :(得分:0)

您实际上需要了解ApplicationContext。这是一个界面,根据配置会有不同的实现。

在使用new ClassPathXmlApplicationContext("applicationContext.xml");时,请注意初始的右侧,它表示 ClassPathXmlApplicationContext ,因此 XML 必须存在于类中路径。 因此,将 applicationContext.xml 拖到src文件夹中。

  

要点:新的ClassPathXmlApplicationContext 作为名称   [ClassPathXml]将在您的src文件夹中查找 xml 文件   项目,因此仅将xml文件拖到此处。

ClassPathXmlApplicationContext-从XML加载上下文定义 位于类路径中的文件,将上下文定义文件视为类路径 资源。

FileSystemXmlApplicationContext-从XML加载上下文定义 文件系统中的文件。

XmlWebApplicationContext-从包含的XML文件中加载上下文定义 在Web应用程序中。

答案 16 :(得分:0)

在使用Maven时遇到同样的问题,然后我将XML文件放入src/main/java路径并且它有效。

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

答案 17 :(得分:0)

我使用Netbeans,我通过将文件放入:Other Sources默认包解决了我的问题,然后我用这种方式调用它:

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

resources folder

答案 18 :(得分:0)

请执行此代码 - 它有效

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

o / w:删除主方法类并在重新创建时重新创建它,请取消选中它所使用的继承抽象方法

答案 19 :(得分:0)

在Spring中,所有源文件都在src / main / java中。 同样,资源通常保存在src / main / resources中。 因此,请将spring配置文件保存在resources文件夹中。

确保您在src / main / resources中的文件也有ClassPath条目。

在.classpath中检查以下2行。如果他们丢失了添加他们。

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

所以,如果你有一切就绪,下面的代码应该可行。

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

答案 20 :(得分:0)

我将applicationContext.xml放在src / main / java文件夹中并且工作正常

相关问题