【问题标题】:IOException parsing XML document from class path resource - HTTP Status 500 - Servlet.init()IOException 从类路径资源解析 XML 文档 - HTTP 状态 500 - Servlet.init()
【发布时间】:2013-08-23 13:46:25
【问题描述】:

我正在构建一个简单的 Spring MVC Maven 构建的 java WAR 应用程序。我的 Maven 项目使用 eclipse tomcat 插件成功清理和构建并部署到服务器,没有错误。但是,当我尝试运行应用程序 Servlet 时,出现以下异常:

    Aug 23, 2013 2:35:29 PM org.springframework.web.servlet.FrameworkServlet initServletBean
INFO: FrameworkServlet 'FileWatcher': initialization started
Aug 23, 2013 2:35:29 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing WebApplicationContext for namespace 'FileWatcher-servlet': startup date [Fri Aug 23 14:35:29 BST 2013]; root of context hierarchy
Aug 23, 2013 2:35:29 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [spring/file-watcher.xml]
Aug 23, 2013 2:35:29 PM org.springframework.web.servlet.FrameworkServlet initServletBean
SEVERE: Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [spring/file-watcher.xml]; nested exception is java.io.FileNotFoundException: class path resource [spring/file-watcher.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:174)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:599)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:665)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:518)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    at javax.servlet.GenericServlet.init(GenericServlet.java:160)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:865)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)
Caused by: java.io.FileNotFoundException: class path resource [spring/file-watcher.xml] cannot be opened because it does not exist
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:158)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
    ... 33 more

我的项目配置如下:

web.xml

    <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    version="2.5"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">


    <display-name>FileWatcher</display-name>

    <description>File Watcher</description>


    <!-- To load multiple context files here just put a space between your files 
        listed, like here http://blog.codehangover.com/load-multiple-contexts-into-spring/ -->
    <servlet>
        <servlet-name>FileWatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/file-watcher.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>



    <servlet-mapping>
        <servlet-name>FileWatcher</servlet-name>
        <url-pattern>/FileWatcher/*</url-pattern>
    </servlet-mapping>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/file-watcher.xml</param-value>
    </context-param>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

</web-app>

pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
    default-autowire="byName">

    <bean id="FileWatcher" class="com.test.FileWatcher" init-method="initialize" />

</beans>

我的 Java 类如下所示:

 public class FileWatcher {
    ....
    }

我是这个系统的新手,所以我不确定我哪里出错了,谁能帮我解决这个错误?

【问题讨论】:

  • WEB-INF/classes 中有spring/file-watcher.xml 吗?
  • 嗨,我没有 WEB-INF/classes 文件夹,我应该创建一个吗?编辑:从头开始,我检查了目标目录,那里有一个 WEB-INF/classes 目录,其中包含一个 file-watcher.xml 文件。它需要在spring目录中吗?
  • 您的路径应该与 web.xml 文件中的上下文参数匹配 contextConfigLocationclasspath:spring/file-watcher.xml参数值>
  • 谢谢,我已经这样做了,但我仍然有错误...还有其他想法吗?

标签: java spring maven spring-mvc


【解决方案1】:

在WEB-INF下创建spring命名文件夹。

在 spring 文件夹中创建 file-watcher.xml 文件。

之后你的路径将是

你的项目\src\main\webapp\WEB-INF\spring\file-watcher.xml

将以下 XML 内容粘贴到 file-watcher.xml

  <?xml version="1.0" encoding="UTF-8"?>
   <beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
       default-autowire="byName">

     <bean id="FileWatcher" class="com.test.FileWatcher" init-method="initialize" />

   </beans>

然后运行您的服务器。它会起作用的。

【讨论】:

  • 您好,感谢您的帮助。我仍然收到错误代码 500。知道为什么没有自动生成 spring 文件夹吗?每次 maven 全新安装后,我都必须将其添加到 target/WEB-INF 目录
  • 请像这样放置 user-management\src\main\webapp\WEB-INF\spring\file-watcher.xml。用户管理是我的项目根路径。如果您运行 mvn clean,请勿将任何资源放置在目标文件夹中。
  • 工作正常,但仍然是错误代码 500。文件夹在此处结束:...\FileSystem\target\watchFileSystem-0.0.1-SNAPSHOT\WEB-INF\spring
  • 没关系 maven 会将资源和其他内容复制到目标文件夹。你有没有例外。如果是,请在此处发布
  • 它的路径问题我确定。看到 IOException 和嵌套异常是 FileNotFoundException ....... IOException parsing XML document from class path resource [spring/file-watcher.xml];嵌套异常是 java.io.FileNotFoundException: 类路径资源 [spring/file-watcher.xml] 无法打开,因为它在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341) 中不存在
【解决方案2】:

我可能给你的一个建议是让你检查 file-watcher.xml

的位置

如果您使用 Maven,您可能需要考虑将您的 file-watcher.xml 放在 resources 文件夹中。

并在您的 web.xml 文件中声明您的 标签,如下所示:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:file-watcher.xml</param-value>
    </context-param>

注意:确保 src/main/java/resources 在您的类路径中,并记住在 Maven 中,资源的标准目录是 src/main/resources ,所以我建议你把这个文件放在那里。

【讨论】:

    猜你喜欢
    • 2011-08-21
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2020-06-26
    • 2010-12-13
    • 1970-01-01
    相关资源
    最近更新 更多