• 关于springmvc项目在启动时报xsd文件解析错误的问题


    1.问题描述

    springmvn项目里面的配置文件对应的xsd下载不到或者在本地jar包找不到,此时项目启动时会抛出异常:

     SEVERE [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Servlet.init() for servlet [SpringMVC] threw exception
            org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 20 in XML document from class path resource [spring/spring-mvc.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 20; columnNumber: 28; cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'mvc:annotation-driven'.
                    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:399)
                    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
                    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
                    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
                    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
                    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
                    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
                    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
                    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
                    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:613)
                    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:514)
                    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:663)
    

    大致意思是验证某些标签出错了。
    这个问题出错的原因有如下几方面:

    1. 标签确实写错了
    2. spring配置文件中最上面配置的xmlns地址无法访问到,比如本地断网情况下
    3. spring配置文件中最上面配置的xsd文件带有版本号,这个版本号的文件在本地spring的jar包中找不到,比如使用了springmvc4.1的版本,配置文件中配置了4.3的版本:http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd

    以上三种情况下,第一种很少,最容易解决。第二种spring本身考虑了这个问题,默认先从本地jar包中寻找对应的版本,如果不指定版本则寻找最新的,如果指定版本则寻找指定版本,如果找不到则去xmlns指定的地址去寻找。如果也访问不到就抛异常。
    我的工程出现了第三种情况,配置的版本号太高,使用的jar包版本稍微有些低,导致xsd在本地无法找到,同时spring官网的地址又把本地ip给屏蔽了 导致无法访问到。

    解决方式

    最终的解决方式就是去掉版本,让spring默认从本地寻找最高的版本号:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context.xsd
                            http://www.springframework.org/schema/mvc
                            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    </beans>
    
  • 相关阅读:
    《网络是怎样连接的》读书笔记一
    移植mplayer到开发板
    解决ubuntu安装ssh服务无法打开解析包问题
    嵌入式软件工程师面经
    c语言-数组、指针面试题
    Linux命令- echo、grep 、重定向、1>&2、2>&1的介绍
    回调函数的作用
    数据结构-单链表回环函数判断
    算法-一步步教你如何用c语言实现堆排序(非递归)
    算法-快速排序
  • 原文地址:https://www.cnblogs.com/bcde/p/16198451.html
Copyright © 2020-2023  润新知