【问题标题】:Spring Boot exception: Could not open ServletContext resource [/WEB-INF/dispatcherServlet-servlet.xml]Spring Boot 异常:无法打开 ServletContext 资源 [/WEB-INF/dispatcherServlet-servlet.xml]
【发布时间】:2016-04-04 05:14:00
【问题描述】:

我开发了这个概念证明https://github.com/DISID/disid-proofs/tree/master/spring-boot-weblogic 来测试在 Weblogic 12c (12.2.1) 中部署 Spring Boot 应用程序。

应用程序部署并成功启动,但是当我尝试连接到它时(即 /accounts?number=1234),显示以下错误:

Error 500--Internal Server Error
From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1:
10.5.1 500 Internal Server Error 
The server encountered an unexpected condition which prevented it 
  from fulfilling the request.

而且日志文件有异常:

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/dispatcherServlet-servlet.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/dispatcherServlet-servlet.xml]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:344)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
    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:129)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:609)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:510)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:634)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:682)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:553)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    at javax.servlet.GenericServlet.init(GenericServlet.java:244)
    at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run

我错过了什么吗?

谢谢,

【问题讨论】:

  • dispatcherServlet-servlet.xml 来自哪里?可能是来自 Weblogic 特定的 Spring 支持或其他什么?
  • 不知道,Spring Boot应用很简单,请看github.com/DISID/disid-proofs/tree/master/spring-boot-weblogic的概念证明
  • 我已经这样做了。我看不出有什么问题。
  • 您能否提供更多关于您所说的“Weblogic 特定 Spring 支持”的信息?
  • docs.oracle.com/cd/E24329_01/web.1211/e24975/toc.htm - 我可以在您的堆栈中看到 weblogic 正在启动(无论出于何种原因),并且可能正在尝试在默认位置查找配置文件。也许在网上搜索那个东西?

标签: spring-mvc spring-boot weblogic weblogic12c


【解决方案1】:

我找到了一种解决方法,将一个虚拟的dispatcherServlet-servlet.xml 文件放在WEB-INF 下:

<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.xsd">

    <!-- Do not remove this file! -->

</beans>

【讨论】:

  • 是的,这也适用于我们。非常感谢!
  • 非常感谢您的想法。顺便说一句,使用最新的当前版本 12.2.1.3,问题就消失了。
【解决方案2】:

我已经使用spring-boot-sample-war(带有一个额外的 weblogic.xml 来处理日志记录)在 WebLogic 12.2.1.0(普通新安装)中重现了这个问题。还尝试了最新的补丁集(WLS PATCH SET UPDATE 12.2.1.0.160419),但问题仍然存在。

由于某种原因,WebLogic 决定在您访问 / 上可用的应用程序后立即使用自己的配置创建 DispatcherServlet。

我已向 Oracle 支持提出服务请求,我们将看看他们对此问题的看法。

更新:“补丁 23124727:由于 JAVA.IO.FILENOTFOUNDEXCEPTION 无法在 12.2.1 上部署 SPRING BOOT .WAR”适用于 Oracle WebLogic Server 12.2.1.0.0,并且适用于 spring-boot-sample-war以及更高级的应用程序。

【讨论】:

  • 酷!感谢您向 Oracle 支持报告!
  • 有没有办法跟踪服务请求?
  • 这是 SR #3-12394371821。不过,不确定它是否可供其他人使用。可能不会。他们目前正在调查。
  • @ØyvindHorneland 我们有同样的问题,我可以补充一点,它适用于 WLS 12.1.3 但不适用于 WLS 12.2,与您的情况相同。来自 Oracle 的任何更新?
  • @Kristoffer 补丁 23124727 可用。它似乎从 5 月 10 日开始可用。但我没有得到更新。无论如何,我现在已经在 spring-boot-sample-war 以及我们自己的应用程序上进行了尝试,它似乎工作得很好。
猜你喜欢
  • 2015-02-03
  • 1970-01-01
  • 2018-12-18
  • 2016-02-22
  • 2012-06-05
  • 2023-03-15
  • 2022-01-18
  • 2014-04-16
  • 1970-01-01
相关资源
最近更新 更多