IOException从类路径资源解析XML文档

时间:2011-05-09 16:48:08

标签: java xml spring classpath

好的,我正在尝试将mavenise作为一个项目。但是我的项目找不到包含一些bean的xml文件。 combined2.xml

我把它定义为:

    public RepeatingGrpPoC() {
    appContext = new ClassPathXmlApplicationContext(
            new String[] { "src/main/java/resources/combined2.xml",});
    c = 0;    
}

然而,由于我不知道的原因,我经常收到错误。

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [src/main/java/resources/combined2.xml]; nested exception is java.io.FileNotFoundException: class path resource [src/main/java/resources/combined2.xml] cannot be opened because it does not exist
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:143)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:126)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:92)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:465)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:395)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
at metadataPoC.RepeatingGrpPoC.<init>(RepeatingGrpPoC.java:34)
at metadataPoC.Main.main(Main.java:22)

引起:java.io.FileNotFoundException:无法打开类路径资源[src / main / java / resources / combined2.xml],因为它不存在     在org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:141)     在org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)     ......还有14个

程序在哪里可以查找此文件,因为我已经给它了相对路径?

8 个答案:

答案 0 :(得分:32)

它正在尝试从类路径加载此文件,但无法找到它。尝试仅指定"combined2.xml"而不是"src/main/java/resources/combined2.xml",并确保src / main / java / resources在您的类路径中。

顺便说一句,在Maven中,资源的标准目录是src/main/resources,所以我建议你把这个文件放在那里。

答案 1 :(得分:1)

Maven,有资源的标准目录是src / main / resources,所以如果你把你的文件留在这里,它就会接受它。  并在路径中只提供文件名。

例如

 ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("application-context.xml");

我遇到了同样的问题

答案 2 :(得分:1)

您必须替换资源文件夹中的.xml,并输入:

 String[] contextPaths = new String[] {"Xxx.xml"};
    new ClassPathXmlApplicationContext(contextPaths);

如果没有任何其他配置,Spring会通过dafault在resources文件夹中搜索所有.html和.xml文件

答案 3 :(得分:0)

试试这个

appContext = new ClassPathXmlApplicationContext(
            new String[] { "/**/combined2.xml", "/**/xxx.xml"});

答案 4 :(得分:0)

您可以使用xml文件的相对路径。 相对路径:相对于XML文件所在的包的路径。

E.g。 假设

package = beanfactory,  
xml file name = application-context.xml, 

和此包中的xml文件。 然后提供路径为“/beanfactory/application-context.xml”

ApplicationContext factory=new 
ClassPathXmlApplicationContext("/beanfactory/application-context.xml");

这没有错误。

答案 5 :(得分:0)

combined2.xml移到您的resources文件夹中。

如果要放置任何其他配置文件,例如applicationContext.xml,请确保将其放在resources文件夹中。

答案 6 :(得分:0)

.xml个文件保留在资源文件夹中,并像这样使用ClassPathXmlApplicationContext

示例:

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

答案 7 :(得分:-1)

如果您使用的是 Maven,请将 Config 文件放在 Resource 文件夹下。如下图。

enter image description here