`
Mr.Chris
  • 浏览: 84092 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一个XML解析失败排查过程的分享

    博客分类:
  • Java
阅读更多

 

今天遇到一个比较诡异的问题, 我们的应用在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_awithout_a两个文件的差异内容,因为A的依赖关系很复杂,所以单纯肉眼,分辨不出哪个依赖出了问题,只好放弃了这条路子。

 

后面又仔细阅读了一遍错误日志,然后缩小搜索范围,因为从字面上看,不外乎与XMLSpring相关。于是排查了Spring版本是否正常,并确定和Spring无关。那只能是XML相关的依赖导致问题了。

 

再次查看工程依赖树,和XML解析相关的包大致有:xml-apisxml-resolverxmlParserAPIsxercesImpl等。这回还真有所收获,发现因为A的引入,导致了xercesImpl的版本降级。在引入A之前的xercesImpl版本为2.9.1、引入A后则变为2.4.0. 赶紧排除A中的xercesImpl,部署应用,正常启动,搞定收工。

 

这也解释了为什么Jboss可以正常部署,因为Jboss自带了xercesImpl-2.7.1.

 

By Mr.Chris

 

分享到:
评论
1 楼 real_junlin 2013-08-12  
在jetty下能够运行的解决方法是啥?

相关推荐

    处理XML解析中的错误

    SAX是一个事件驱动的解析器,它在解析XML文档时触发特定事件,如开始元素、结束元素等。这种模式允许开发者在解析过程中捕获并处理错误,而不会导致整个解析过程的中断。 错误处理是任何应用程序的关键组成部分,...

    tinyxml_vc6.0调试ok

    同时,确保 XML 输入符合规范,因为不合法的 XML 将会导致解析失败。 在理解和使用 TinyXML 时,还需要注意内存管理,因为库中的一些对象使用了 C++ 的原始指针,需要手动管理内存。此外,虽然 TinyXML 支持 STL,...

    httpwatch文件自动导出为xml

    "httpwatch文件自动导出为xml"这个功能则是HTTPWatch提供的一个自动化选项,使得用户能够方便地将捕获的数据以XML格式导出,便于进一步处理或与其他系统集成。 XML(可扩展标记语言)是一种用于标记数据的语言,其...

    XML服务安装这样都不行吗

    7. **XML解析**:理解DOM(Document Object Model)和SAX(Simple API for XML)两种解析方式的差异是重要的。DOM将整个XML文档加载到内存中形成树形结构,适合小规模数据;而SAX是事件驱动的,逐行解析,适用于大...

    xml.tar.gz_c++ 读xml_xml与tar_日志管理

    libxml2是一个功能强大的库,支持XML解析、验证、XPath查询等,适用于大型项目。而pugixml则是一个轻量级的库,适用于嵌入式或对性能有高要求的环境。使用这些库,开发者可以通过解析XML文档来获取其中的数据,例如...

    Download XML structure to Application server.doc

    6. **错误处理和日志记录**:在传输过程中,应记录所有成功和失败的操作,以便于问题排查和审计。 整个过程需要对SAP系统有深入理解,包括其ABAP编程、接口技术以及XML处理能力。对于初学者来说,"Download XML ...

    APN xml比对工具

    XML格式便于数据的组织和解析。 - XML文件中包含了多个APN条目,每个条目包含访问点名、用户名、密码、MCC(Mobile Country Code)、MNC(Mobile Network Code)等关键字段。 2. **APN比对的必要性** - 当设备...

    Java常见问题排查

    - **反序列化失败:** 接收数据后无法正确解析为对象。 - **网络问题:** 包括但不限于延迟高、丢包、重传率高等。 **排查方法:** - **日志和监控信息:** 查看服务端的日志和响应时间监控信息。 - **GC日志分析:...

    asp.net post xml数据 (500) 内部服务器错误解决办法(源代码)

    5. **数据处理逻辑错误**:在接收并解析XML数据的代码段可能存在逻辑错误,如XML解析器的使用不当、数据验证错误等。确保正确使用如`XmlDocument`或`XDocument`类来解析XML。 针对上述问题,解决方法包括: 1. **...

    SQL Broswer启动请求失败

    MSXML是Microsoft XML核心服务的一个版本,用于提供XML解析和处理功能。某些情况下,SQL Server依赖于这些XML服务来正常运行,包括启动SQL Browser服务。 2. **SQL Server安装问题**:安装过程中可能出现了错误或者...

    海康威视iVMS-8700平台SDK常见问题排查指南

    如果访问失败,则可能是由于子系统未安装、未启用License或安装过程出现问题。此时,建议联系平台管理员或技术支持重新安装部署子系统。 2. **检查配置文件**:查看HTTP-OpenAPI服务的`constants.properties`配置...

    WebLogic_Cluster_HTTP会话复制失败的故障处理总结

    ### WebLogic Cluster HTTP会话复制失败的故障处理与解析 #### 故障描述与现象 在WebLogic集群环境中,HTTP会话状态未能成功从主服务器(Primary Server)复制到备服务器(Secondary Server),导致以下一系列问题...

    数据库配置文件解析

    解析文件内容则可能需要正则表达式、XML解析库(如Python的`ElementTree`)或JSON解析库,取决于cfg文件的结构。对于简单的文本配置文件,可以逐行读取并根据特定分隔符(如等号)将键值对分开。 写入cfg文件同样...

    JAVA技术的网页内容智能抓取.pdf

    1. **XML解析**:XML(Extensible Markup Language)是用于存储和传输数据的标准格式。DOM4J是一个流行的JAVA库,用于解析和操作XML文档。它允许程序读取XML配置文件,以便定义抓取任务。 2. **HTML解析**:jericho...

    hadoop2.x集群搭建.txt(hdfs和yarn貌似正常,但mapreduce 提交job执行失败,请看我的另一个资源,另一个搭建是成功的)

    根据提供的文件信息,本文将详细解析Hadoop 2.x集群...在整个过程中,关键是要仔细检查每一个配置细节,并确保集群各个组件之间能够协同工作。希望本篇文章能帮助读者顺利搭建自己的Hadoop集群,并解决可能遇到的问题。

    分享QQ空间 Android

    调用`QQAuth`的`login`方法启动授权流程,用户同意后,会返回一个授权码,通过这个码换取access_token和open_id,这些信息用于后续的API调用。 6. **处理回调** 分享操作完成后,QQ SDK会通过回调接口(如`...

    基于JAVA技术的网页内容智能抓取

    1. **XML解析**:DOM4J被用来解析XML配置文件,这是一个强大的Java库,提供了灵活的XML处理功能,可以方便地读取、操作和生成XML文档。 2. **HTML解析**:jericho-html-2.5用于解析HTML文件,能够处理复杂的HTML...

    android博客阅读器源码

    【Android博客阅读器源码详解】 Android博客阅读器是一...通过分析这个Android博客阅读器的源码,开发者可以学习到如何在Android平台上实现一个功能完整的应用,提升自己的编程技能,同时理解Android开发的最佳实践。

    OPENSAML所需jar包

    - **初始化配置**:设置XML解析器,加载XML命名空间和证书等。 - **创建SAML对象**:根据需求创建断言、主体、属性声明等。 - **填充SAML对象**:设置对象的属性,如主体信息、认证信息、属性声明等。 - **编码...

Global site tag (gtag.js) - Google Analytics