今天遇到一个比较诡异的问题, 我们的应用在JBoss下可以正常部署, 到Jetty环境下则部署失败,并提示如下信息:
2011-06-14 18:14:34.812:WARN::Failed startup of context runjettyrun.HSFJettyWebAppContext@1f21c50{/,src/main/webapp}
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 37 in XML document from ServletContext resource [/WEB-INF/webx.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'services:webx-configuration'.
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:404)
<中间略去若干行>
2011-06-14 18:14:34.814:WARN::Nested in org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 37 in XML document from ServletContext resource [/WEB-INF/webx.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'services:webx-configuration'.:
org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'services:webx-configuration'.
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
<中间略去若干行>
2011-06-14 18:14:34.829:INFO::Started SelectChannelConnector@0.0.0.0:80
上面花了大篇幅粘贴错误日志,只是想留个纪念。
出现这个问题,首先怀疑到的是环境是不是有问题。检查了一会儿,没有头绪。换个思路看看,瞅瞅这两天有哪些文件变更。(小注:之前一直运行正常)。通过观察SVN日志,发现最近有新引入了一个包(且记为A.jar)。或许这就是问题所在。
我们的工程是用Maven进行依赖管理的,所以接着我在POM中将新引入的A.jar移除,再次部署应用,果然正常启动。但是A.jar可能别的同事在用,不能草率的移除了事。并且我断定不是A.jar本身,而是其带来的间接依赖导致上述的问题。
紧接着我需要做的是揪出A带来的间接依赖中的哪一个导致XML解析失败。
首先我打印出了增加A.jar和移除A.jar后的依赖树,命令如下:
mvn dependency:tree > with_a
mvn dependency:tree > without_a
然后用BeyondCompare比对with_a和without_a两个文件的差异内容,因为A的依赖关系很复杂,所以单纯肉眼,分辨不出哪个依赖出了问题,只好放弃了这条路子。
后面又仔细阅读了一遍错误日志,然后缩小搜索范围,因为从字面上看,不外乎与XML和Spring相关。于是排查了Spring版本是否正常,并确定和Spring无关。那只能是XML相关的依赖导致问题了。
再次查看工程依赖树,和XML解析相关的包大致有:xml-apis、xml-resolver、xmlParserAPIs、xercesImpl等。这回还真有所收获,发现因为A的引入,导致了xercesImpl的版本降级。在引入A之前的xercesImpl版本为2.9.1、引入A后则变为2.4.0. 赶紧排除A中的xercesImpl,部署应用,正常启动,搞定收工。
这也解释了为什么Jboss可以正常部署,因为Jboss自带了xercesImpl-2.7.1.
By Mr.Chris
分享到:
相关推荐
解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml
java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava...
易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 教程 带源码
XML 解析XML 解析XML 解析XML 解析XML 解析XML 解析XML 解析
读取和设置xml配置文件是最常用的...TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。
xml 解析几何 xml 解析几何 xml 解析几何
C# XML解析方式
XML解析技术研究XML解析技术研究XML解析技术研究XML解析技术研究XML解析技术研究
xml解析xml解析xml解析例子xml解析xml解析xml解析xml解析xml解析xml解析xml解析
TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手。 这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便...
有些情况下,在开发web项目中会遇到weblogic无法解析xml的错误,是因为weblogic在解析xml时是调用自己的方法去解析,会产生一些莫名其妙的错误,我们只要在web-inf下添加weblogic.xml让其让出解析权即可.
LabVIEW XML解析器示例, 包含xml加载,保存,解析等功能
一个xml的解析方法,供参考。 import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource;
XML解析、XML生成工具,灵活好用的XML解析器、封装接口简单易用
XML解析DEMOXML解析DEMOXML解析DEMOXML解析DEMOXML解析DEMO
使用dom4j解析XML,用于解析复杂XML,多层镶嵌XML,多层循环xml解析,解析完保存到实体类
xml解析器失败时候可以尝试打开开始-运行-cmd 输入命令来进行解决
用于解析XML文件用于解析XML文件用于解析XML文件用于解析XML文件用于解析XML文件用于解析XML文件用于解析XML文件用于解析XML文件用于解析XML文件
C++实现对xml文件的解析,C++实现对xml文件的解析,C++实现对xml文件的解析。
minixml是适合嵌入式系统的xml解析器,支持dom