Unable to locate Spring NamespaceHandler for XML schema namespace排錯記錄

今日運行項目,發生了這個錯誤
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包的版本問題
如遇到這個問題,可從這兩個可能因素入手排查。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章