今日运行项目,发生了这个错误
Context initialization failed
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://dubbo.apache.org/schema/dubbo]
Offending resource: class path resource [spring/springmvc.xml]
在网上搜索许久,
参考链接:https://blog.csdn.net/hankle_xu/article/details/79288175
https://blog.csdn.net/lff0305/article/details/50313663
文中提到是缺少相应jar包的问题,而我很确定项目没有缺少jar!
从文中得到了一个很关键的信息:“是在工程的classpath路径下未找到正确的NamespaceHandler来解析配置文件中的名称空间”、“配置文件位于 META-INF/spring.schemas”
顺着这个思路,一路检查,原来是 jar包 版本的问题!
排查记录:
如报错信息,我是在springmvc.xml中引用了
<beans xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
我使用的dubbo的版本为2.5.3,
在项目构建路径中查看dubbo-2.5.3.jar,/META-INF/spring.schemas 文件,内容如下:
http\://code.alibabatech.com/schema/dubbo/dubbo.xsd=META-INF/dubbo.xsd
- 1
可以看到,
sprimgmvc.xml引用dubbo的schema
(http://dubbo.apache.org/schema/dubbo/dubbo.xsd
)
和 dubbo-2.5.3.jar中定义的schema
(http://code.alibabatech.com/schema/dubbo/dubbo.xsd=META-INF/dubbo.xsd
)
不一致 !!!导致无法定位
解决:将sprimgmvc.xml引用dubbo的schema 对应修改成了jar包中定义的schema,项目运行正常运行了。
为什么我会遇到这个问题呢
参看:https://blog.csdn.net/qq_31772441/article/details/82531359
继续深究
在Mavn中央仓库 将 dubbo的各个版本jar包都下载了下来,解压来查看,重要发现!!
在dubbo-2.6.2.jar中 /META-INF/spring.schemas 的内容如下:
http\://dubbo.apache.org/schema/dubbo/dubbo.xsd=META-INF/dubbo.xsd
http\://code.alibabatech.com/schema/dubbo/dubbo.xsd=META-INF/compat/dubbo.xsd
对比我正在使用的 dubbo-2.5.3.jar中 /META-INF/spring.schemas
http\://code.alibabatech.com/schema/dubbo/dubbo.xsd=META-INF/dubbo.xsd
对比之下:dubbo-2.6.2.jar的spring.schemas加入了http://dubbo.apache.org/schema/dubbo
,
而且!第二行出现了个单词compat(意思:兼容性),
说明在dubbo-2.6.2版本开始,将http://dubbo.apache.org/schema/dubbo
设置为主要的schema,
而为了兼容以前的版本,保留了http://code.alibabatech.com/schema/dubbo
讲得有点不知头尾,总而言之,对于dubbo
- dubbo-2.6.2 版本之前,只能使用如下配置
<beans xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
- dubbo-2.6.2版本及之后,能使用两种写法
1
<beans xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
2
<beans xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
解决问题的方式:升级dubbo的版本 or 修改xml的配置,凭君喜好。
回归的问题本身,Unable to locate Spring NamespaceHandler for XML schema namespace
导致问题的可能原因:
1、缺少相应jar包
2、jar包的版本问题
如遇到这个问题,可从这两个可能因素入手排查。
完