cvc-complex-type.2.4.c: 問題解決
2016年12月01日 12:03:26
閱讀數:1335
最近在工作中,遇到這樣的異常:
cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'util:map'.
本地環境正常,而在測試環境報錯。
spring的配置檔案如下:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.0.xsd">
經過一番源碼跟蹤,分析出問題出在spring的util的systemId配置上。在spring内部會根據org.springframework.beans-3.0.5.jar/META-INF/spring.schemas檔案中配置的systemId映射,取到jar包中的xsd檔案,但由于配置了spring-util-4.0.xsd,spring.schemas檔案中沒取到,sax會去配置的位址http://www.springframework.org/schema/util/spring-util-4.0.xsd擷取。而如果在斷網情況下,遠端檔案是取不到的。這樣就會抛出cvc-complex-type.2.4.c的異常。為了解決這個問題,可以把systemId改成與spring版本對應的即可,或者,去掉版本号,直接spring-util.xsd,這樣即使将來更換spring的版本也不至于出現同類問題。
好了,問題雖然解決了,但這個問題終究來源于自己,在開發過程中,忽略了開發細節,或者是對sax的驗證機制不知其是以然,終此埋下大坑。希望以後在實際開發時,能用心用腦,繼續深入研究技術原理。