前段时间看Tomcat源码,了解到了commons-digester,写过简单的demo,刚好项目中碰到了一个xml解析功能,便使用了它。
创建Digester:
private Digester createDigester() {
Digester digester = new Digester();
digester.addObjectCreate("Root", ByqYspPutuDesc.class);
digester.addObjectCreate("Root/PeakInfo", PeakInfo.class);
digester.addSetProperties("Root/PeakInfo");
digester.addSetNext("Root/PeakInfo", "setPeakInfo");
digester.addObjectCreate("Root/PeakInfo/XVal", XValue.class);
digester.addSetProperties("Root/PeakInfo/XVal");
digester.addSetNext("Root/PeakInfo/XVal", "addXvalue");
digester.addObjectCreate("Root/CurveInfo", CurveInfo.class);
digester.addSetProperties("Root/CurveInfo");
digester.addSetNext("Root/CurveInfo", "setCurveInfo");
digester.addObjectCreate("Root/CurveInfo/XVal", XValue.class);
digester.addSetProperties("Root/CurveInfo/XVal");
digester.addSetNext("Root/CurveInfo/XVal", "setXvalue");
digester.addObjectCreate("Root/CurveInfo/YVal", YValue.class);
digester.addSetProperties("Root/CurveInfo/YVal");
digester.addSetNext("Root/CurveInfo/YVal", "setYvalue");
return digester;
}
然后digester.parse(xmlIn);
一下子就解析出来了,觉得相当好用,没管那么多了,结果问题来了。
本地运行OK,打包到生产环境运行时发现报错了。因为该工程最后要集成到其他工程里面运行,整个外部工程是一个专门的平台,里面集成了很多模块,结果就出问题了。按照之前的经验,估计是跟平台环境有关(jar冲突之类。。。)。无奈,找到运维人员,查看了下weblogic后台,发现报出ClassNotFoundException,问题大概定位到了。
拿到一个生产环境的工程copy,然后跟平台负责人进行沟通,发现没有jar冲突,只是commons-digester.jar被放到了一个很特别的地方(整个平台工程是一个ejb工程,几个lib目录我也不了解),而我的模块jar包放到了WEB-INF/lib目录下,所以digester在解析的时候找不到我指定的类。
这肯定是跟classloader有关了,刚提到的那个特别的地方是某个父classloader的repository,而WEB-INF/lib是webappClassloader的repository,webappClassloader的parent是前者。郁闷了半天,在想是不是要把jar的位置挪一下呢,结果凭着直觉,在eclipse中敲下digester.set... 欣喜若狂啊!冒出setClassLoader方法,果断输入
digester.setClassLoader(Thread.currentThread().getContextClassLoader());
虽然对classloader了解不深,但是问题总算是解决了,最近看tomcat、commons-logging等源码,发现classloader是一个很关键的东西,以后还是得深入了解下。
分享到:
相关推荐
然而,你提到的在Maven中下载的`commons-digester-2.1.jar`无法使用,可能有以下几个原因: 1. **依赖冲突**:Maven项目中可能已经包含了其他版本的`commons-digester`或者与其有依赖关系的库,导致版本不兼容。 2....
赠送jar包:commons-digester3-3.2.jar; 赠送原API文档:commons-digester3-3.2-javadoc.jar; 赠送源代码:commons-digester3-3.2-sources.jar; 赠送Maven依赖信息文件:commons-digester3-3.2.pom; 包含翻译后...
赠送jar包:commons-digester3-3.2.jar; 赠送原API文档:commons-digester3-3.2-javadoc.jar; 赠送源代码:commons-digester3-3.2-sources.jar; 赠送Maven依赖信息文件:commons-digester3-3.2.pom; 包含翻译后...
例如,以下代码展示了如何使用Apache Commons Digester创建一个简单的Java对象: ```java import org.apache.commons.digester.Digester; import org.apache.commons.digester.ObjectCreateRule; import org.apache...
在标题和描述中提到的"commons-digester-1.7.jar.zip"是一个包含Apache Commons Digester 1.7版本的压缩文件,它包含了`commons-digester-1.7.jar`库本身以及相关的`commons-digester-1.7.jar.license.txt`文件,后...
JSF开发所必需包:花了很长时间才收集好,很费时,现已收集好,何不分享给大家,让大家节省时间做点有意义的事情呢?呵呵。...commons-digester.jar jsf-api.jar jsf-impl.jar jstl.jar standard.jar
在"commons-digester-2.0.rar"这个压缩包中,包含了"commons-digester-2.0-bin.zip"和"commons-digester-2.0-src.zip"两个子文件,分别对应着编译好的二进制库和源代码。 一、commons-digester-2.0-bin.zip 这个...
commons-digester-1.7.jar
commons-digester-1.8.jar
**Apache Commons Digester** 是一个Java库,它允许开发人员定义一套规则,这些规则可以解析XML文档,并根据这些规则在Java对象模型中创建和配置对象。这个库在处理XML到Java对象映射时非常有用,特别是在构建配置...
在描述中提到的博客链接(https://aga.iteye.com/blog/218587)可能详细介绍了如何使用Commons Digester来解析XML。通常,使用步骤包括: 1. **引入依赖**:首先,你需要在项目的类路径中包含Apache Commons ...
Apache Commons Digester遵循Apache License Version 2.0,这是一个非常宽松的开源许可证,允许自由使用、修改和分发代码,只要保留原始的版权和许可通知即可。 总的来说,Apache Commons Digester是一个强大的工具...
commons-digester-2.0.0.jar
commons-digester3-3.2.jar
这个"commons-digester-1.7.zip"文件包含了Apache Commons Digester库的1.7版本,这是一个广泛用于处理XML到Java对象映射的开源组件。 在Java开发中,XML通常用于存储和传输数据,因为它具有结构化和可读性。然而,...
本文将围绕标题"quartz-1.6.0/commons-beanutils/commons-digester-1.7 JAR包"展开,详细阐述这些JAR包在Spring中的作用,以及它们各自的核心知识点。 首先,`quartz-1.6.0.jar`是Quartz Scheduler的一个版本。...