升级Spring到3.1及以上版本出现XSD校验错误,该如何修复?
问题解决方案
根本原因
该报错和你的业务XML配置无关,是XML解析器规范兼容问题:Spring 3.1及之后版本的spring-mvc.xsd使用了XML Schema 1.1规范才允许的<xsd:all minOccurs="0">写法,而你当前使用的XML解析器仅支持XML Schema 1.0,1.0规范强制要求<xsd:all>标签的minOccurs和maxOccurs属性必须都为1,所以解析校验时触发报错。
可选择的修复方案
- 方案1:升级XML解析器(最推荐)
升级支持XML Schema 1.1的XML解析器即可兼容高版本Spring的xsd定义,无需修改现有业务配置。如果使用Maven管理依赖,可直接引入Xerces 2.12及以上版本:<dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.12.2</version> </dependency> - 方案2:显式指定3.0版本mvc xsd
如果你暂时无法升级XML解析器,可在Spring XML配置的schemaLocation属性中,将无版本的mvc xsd地址替换为3.0版本地址,你当前用到的<mvc:resources>和<mvc:annotation-driven>标签在3.0版本xsd中均有完整定义,完全兼容使用:
替换前:
替换后:http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd - 方案3:本地托管修改后的xsd文件
如果以上两个方案都无法落地,可以将对应版本的spring-mvc.xsd下载到项目本地资源目录,手动将其中<xsd:all minOccurs="0">的minOccurs属性改为1,再在schemaLocation中指向本地的xsd文件路径即可,不需要修改Spring官方jar包。
内容的提问来源于stack exchange,提问作者eduardog3000
相关产品推荐
相关产品推荐

