cvc-complex-type.2.4.c: 问题解决

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的验证机制不知其所以然,终此埋下大坑。希望以后在实际开发时,能用心用脑,继续深入研究技术原理。

    原文作者:道路修建问题
    原文地址: https://blog.csdn.net/wangshuminjava/article/details/81260078
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞