Unable to locate Spring NamespaceHandler for XML schema namespace排错记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31772441/article/details/82533864

今日运行项目,发生了这个错误
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

可以看到,
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包的版本问题
如遇到这个问题,可从这两个可能因素入手排查。


猜你喜欢

转载自blog.csdn.net/qq_31772441/article/details/82533864