org.xml.sax.SAXParseException: src-import.0: Failed to read imported schema document 'null'

本文记录了一次Tomcat启动过程中遇到的Spring配置文件警告异常,详细分析了异常产生的可能原因并给出了三种解决方案,最终确定问题是由xercesImpl.jar版本引起的。

公司项目用的是ssh,最近发现每次tomcat启动的时候,控制台总是出现下面的这个异常

2015-04-10 09:13:50 [org.springframework.web.context.ContextLoader]-[INFO] - Root WebApplicationContext: initialization started
2015-04-10 09:13:50 [org.springframework.web.context.support.XmlWebApplicationContext]-[INFO] - Refreshing Root WebApplicationContext: startup date [Fri Apr 10 09:13:50 CST 2015]; root of context hierarchy
2015-04-10 09:13:50 [org.springframework.beans.factory.xml.XmlBeanDefinitionReader]-[INFO] - Loading XML bean definitions from class path resource [applicationContext.xml]
2015-04-10 09:13:50 [org.springframework.beans.factory.xml.XmlBeanDefinitionReader]-[WARN] - Ignored XML validation warning
org.xml.sax.SAXParseException: src-import.0: Failed to read imported schema document 'null'.
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:232)
    at org.apache.xerces.util.ErrorHandlerWrapper.warning(ErrorHandlerWrapper.java:141)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:358)
    at org.apache.xerces.impl.xs.traversers.XSDHandler.reportSchemaWarning(XSDHandler.java:1837)
    at org.apache.xerces.impl.xs.traversers.XSDHandler.getSchema(XSDHandler.java:1298)
    at org.apache.xerces.impl.xs.traversers.XSDHandler.getSchema(XSDHandler.java:1240)
    at org.apache.xerces.impl.xs.traversers.XSDHandler.constructTrees(XSDHandler.java:611)
    at org.apache.xerces.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:403)
    at org.apache.xerces.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:381)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.parseSchema(XMLSchemaValidator.java:2250)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.findSchemaGrammar(XMLSchemaValidator.java:2178)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1724)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:568)
    at org.apache.xerces.impl.XMLNamespaceBinder.handleStartElement(XMLNamespaceBinder.java:832)
    at org.apache.xerces.impl.XMLNamespaceBinder.startElement(XMLNamespaceBinder.java:568)
    at org.apache.xerces.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:796)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:752)
    at org.apache.xerces.impl.XMLDocumentScannerImpl$ContentDispatcher.scanRootElementHook(XMLDocumentScannerImpl.java:927)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1519)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:333)
    at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:529)
    at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:585)
    at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:147)
    at org.apache.xerces.parsers.DOMParser.parse(DOMParser.java:221)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:201)
    at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    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:131)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:383)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

出现这个异常并没有影响程序的运行,就是看着很不爽。
根据异常分析和网上查找结果表示该异常基本上确定是spring配置文件头引入xsd错误造成,即无法正确的访问到xsd文件,原因大致有三个:
一:网络异常,无法访问到配置spring的xsd文件网址
二:头文件引入的xsd文件与使用spring版本不一致
三:引入的xsd文件不存在(指向本地)
我的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:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
 </beans>

在我的配置中,点击每一个http链接都可以访问到xsd文件信息,并且网络正常,因此排除第一个原因。
项目中使用的是spring3.2版本,考虑到第二个原因,将配置文件做以下修改:

<?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:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
 </beans>

指定版本号之后,点击http链接同样可以根据网络访问到配置文件信息,但程序异常依然存在。
考虑到可能是网络的原因无法访问,考录将sping的xsd指定为本机文件,在spring的jar中可以找到对应的xsd文件,
修改如下:

<?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:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="
     http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.2.xsd
     http://www.springframework.org/schema/tx classpath:org/springframework/transaction/config/spring-tx-3.2.xsd  
     http://www.springframework.org/schema/aop classpath:org/springframework/aop/config/spring-aop-3.2.xsd">
 </beans>

问题依旧!本地文件真实存在的。
百思不得其解。
又在网上遨游了半天,无意中发现了一个博友好像因为xercesImpl.jar版本出现过这个问题,赶紧做个尝试。
果不其然,换了一个高版本的xercesImpl.jar后,异常奇迹般的消失了。
经查找发现xercesImpl.jar主要用来解析XML文件,与我的问题也刚好对应,应该就是这个jar的问题了。

至此,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值