从类路径资源解析 XML 文档时出现意外异常
Posted
技术标签:
【中文标题】从类路径资源解析 XML 文档时出现意外异常【英文标题】:Unexpected exception parsing XML document from class path resource 【发布时间】:2021-07-13 12:56:41 【问题描述】:我在初始化 spring 上下文时遇到了这个异常。
我可以确认我只使用了一个 spring 版本,即 5.3.3。
当我删除时,
<context:annotation-config />
<context:component-scan base-package="com" />
来自 xml 然后没有与此相关的错误。 同样的 applicationContext.xml 文件也在另一个分支中工作。
2021-07-13 05:05:01,832 INFO [stdout] (ServerService Thread Pool -- 121) DEBUG [4] (07/13/21 06:05:01:832): Startup Bean Invocation: 0 failed
2021-07-13 05:05:01,833 INFO [stdout] (ServerService Thread Pool -- 121) EXCEPTION [3] (07/13/21 06:05:01:833): org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [applicationContext.xml]; nested exception is org.springframework.beans.FatalBeanException: Class [org.springframework.context.config.ContextNamespaceHandler] for namespace [http://www.springframework.org/schema/context] does not implement the [org.springframework.beans.factory.xml.NamespaceHandler] interface: Exception occurred invoking Server Startup Bean
2021-07-13 05:05:01,835 ERROR [stderr] (ServerService Thread Pool -- 121) org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [applicationContext.xml]; nested exception is org.springframework.beans.FatalBeanException: Class [org.springframework.context.config.ContextNamespaceHandler] for namespace [http://www.springframework.org/schema/context] does not implement the [org.springframework.beans.factory.xml.NamespaceHandler] interface
2021-07-13 05:05:01,835 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:417)
2021-07-13 05:05:01,836 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:338)
2021-07-13 05:05:01,836 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
2021-07-13 05:05:01,836 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
2021-07-13 05:05:01,836 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:224)
2021-07-13 05:05:01,836 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:195)
2021-07-13 05:05:01,836 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:257)
2021-07-13 05:05:01,836 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:128)
2021-07-13 05:05:01,836 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:94)
2021-07-13 05:05:01,836 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.context.support.AbstractRefreshableApplicationContext.__refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
2021-07-13 05:05:01,836 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:40002)
2021-07-13 05:05:01,837 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:676)
2021-07-13 05:05:01,837 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.context.support.AbstractApplicationContext.__refresh(AbstractApplicationContext.java:558)
2021-07-13 05:05:01,837 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:41010)
2021-07-13 05:05:01,837 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
2021-07-13 05:05:01,837 ERROR [stderr] (ServerService Thread Pool -- 121) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:85)
2021-07-13 05:05:01,837 ERROR [stderr] (ServerService Thread Pool -- 121) at com.prescient.stnmm.server.beans.BeanAccess.<init>(BeanAccess.java:124)
【问题讨论】:
你有'spring-webmvc'依赖吗? 请使用代码标签添加完整的堆栈跟踪。另外,您如何运行/部署此应用程序? (我怀疑您正在部署到 Oracle WebLogic)。 是的 'spring-webmvc' 依赖存在。 @M.Deinum 我有 bean jar 文件,它是 ear 的一部分并将其部署在 Jboss EAP 7.2 上 他们的问题在于你。你和战争一样在两个耳朵里都有同样的罐子。导致类加载问题(不同类加载器中的同一个类不是同一个类,因此会出错)。 【参考方案1】:在我看来,即使您只使用一个版本,我认为存在内部混淆依赖版本......这导致了依赖关系之间的困难和冲突。
确保您检查了本地所有版本的依赖项。无论如何,我仍在研究更好的答案。
【讨论】:
是的,你是对的,我的 maven 项目都将“spring-webmvc”作为依赖项,这会导致混乱。【参考方案2】:下面是我的应用程序的耳朵结构 '样品.jar' '第一次战争' '第二次战争'
在 sample.jar 文件中,我定义了从“secondWar.war”项目初始化的 bean。项目,即 sample.jar 和“secondWar.war”具有相同的依赖关系,即“spring-webmvc”,这导致了混乱。从“secondWar.war”中删除了这个依赖,它现在正在工作**
【讨论】:
以上是关于从类路径资源解析 XML 文档时出现意外异常的主要内容,如果未能解决你的问题,请参考以下文章
org.springframework.beans.factory.BeanDefinitionStoreException:从 ServletContext 资源解析 XML 文档时出现意外异常
Spring - 从类路径资源 [Beans.xml]-NoClassDefFoundError 加载 XML bean 定义