今天遇到一个比较诡异的问题, 我们的应用在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
分享到:
相关推荐
SAX是一个事件驱动的解析器,它在解析XML文档时触发特定事件,如开始元素、结束元素等。这种模式允许开发者在解析过程中捕获并处理错误,而不会导致整个解析过程的中断。 错误处理是任何应用程序的关键组成部分,...
同时,确保 XML 输入符合规范,因为不合法的 XML 将会导致解析失败。 在理解和使用 TinyXML 时,还需要注意内存管理,因为库中的一些对象使用了 C++ 的原始指针,需要手动管理内存。此外,虽然 TinyXML 支持 STL,...
"httpwatch文件自动导出为xml"这个功能则是HTTPWatch提供的一个自动化选项,使得用户能够方便地将捕获的数据以XML格式导出,便于进一步处理或与其他系统集成。 XML(可扩展标记语言)是一种用于标记数据的语言,其...
7. **XML解析**:理解DOM(Document Object Model)和SAX(Simple API for XML)两种解析方式的差异是重要的。DOM将整个XML文档加载到内存中形成树形结构,适合小规模数据;而SAX是事件驱动的,逐行解析,适用于大...
libxml2是一个功能强大的库,支持XML解析、验证、XPath查询等,适用于大型项目。而pugixml则是一个轻量级的库,适用于嵌入式或对性能有高要求的环境。使用这些库,开发者可以通过解析XML文档来获取其中的数据,例如...
6. **错误处理和日志记录**:在传输过程中,应记录所有成功和失败的操作,以便于问题排查和审计。 整个过程需要对SAP系统有深入理解,包括其ABAP编程、接口技术以及XML处理能力。对于初学者来说,"Download XML ...
XML格式便于数据的组织和解析。 - XML文件中包含了多个APN条目,每个条目包含访问点名、用户名、密码、MCC(Mobile Country Code)、MNC(Mobile Network Code)等关键字段。 2. **APN比对的必要性** - 当设备...
- **反序列化失败:** 接收数据后无法正确解析为对象。 - **网络问题:** 包括但不限于延迟高、丢包、重传率高等。 **排查方法:** - **日志和监控信息:** 查看服务端的日志和响应时间监控信息。 - **GC日志分析:...
5. **数据处理逻辑错误**:在接收并解析XML数据的代码段可能存在逻辑错误,如XML解析器的使用不当、数据验证错误等。确保正确使用如`XmlDocument`或`XDocument`类来解析XML。 针对上述问题,解决方法包括: 1. **...
MSXML是Microsoft XML核心服务的一个版本,用于提供XML解析和处理功能。某些情况下,SQL Server依赖于这些XML服务来正常运行,包括启动SQL Browser服务。 2. **SQL Server安装问题**:安装过程中可能出现了错误或者...
如果访问失败,则可能是由于子系统未安装、未启用License或安装过程出现问题。此时,建议联系平台管理员或技术支持重新安装部署子系统。 2. **检查配置文件**:查看HTTP-OpenAPI服务的`constants.properties`配置...
### WebLogic Cluster HTTP会话复制失败的故障处理与解析 #### 故障描述与现象 在WebLogic集群环境中,HTTP会话状态未能成功从主服务器(Primary Server)复制到备服务器(Secondary Server),导致以下一系列问题...
解析文件内容则可能需要正则表达式、XML解析库(如Python的`ElementTree`)或JSON解析库,取决于cfg文件的结构。对于简单的文本配置文件,可以逐行读取并根据特定分隔符(如等号)将键值对分开。 写入cfg文件同样...
1. **XML解析**:XML(Extensible Markup Language)是用于存储和传输数据的标准格式。DOM4J是一个流行的JAVA库,用于解析和操作XML文档。它允许程序读取XML配置文件,以便定义抓取任务。 2. **HTML解析**:jericho...
根据提供的文件信息,本文将详细解析Hadoop 2.x集群...在整个过程中,关键是要仔细检查每一个配置细节,并确保集群各个组件之间能够协同工作。希望本篇文章能帮助读者顺利搭建自己的Hadoop集群,并解决可能遇到的问题。
调用`QQAuth`的`login`方法启动授权流程,用户同意后,会返回一个授权码,通过这个码换取access_token和open_id,这些信息用于后续的API调用。 6. **处理回调** 分享操作完成后,QQ SDK会通过回调接口(如`...
1. **XML解析**:DOM4J被用来解析XML配置文件,这是一个强大的Java库,提供了灵活的XML处理功能,可以方便地读取、操作和生成XML文档。 2. **HTML解析**:jericho-html-2.5用于解析HTML文件,能够处理复杂的HTML...
【Android博客阅读器源码详解】 Android博客阅读器是一...通过分析这个Android博客阅读器的源码,开发者可以学习到如何在Android平台上实现一个功能完整的应用,提升自己的编程技能,同时理解Android开发的最佳实践。
- **初始化配置**:设置XML解析器,加载XML命名空间和证书等。 - **创建SAML对象**:根据需求创建断言、主体、属性声明等。 - **填充SAML对象**:设置对象的属性,如主体信息、认证信息、属性声明等。 - **编码...