`
crud0906
  • 浏览: 136100 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

commons-digester使用

    博客分类:
  • JAVA
阅读更多
前段时间看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是一个很关键的东西,以后还是得深入了解下。
分享到:
评论
4 楼 di1984HIT 2015-04-14  
学习了,不错。。
3 楼 javatozhang 2014-05-22  
遇到了和lz相同的问题。那时候没解决被迫无奈使用DOM了,学习lz锲而不舍的精神!
2 楼 sdm_seven 2013-04-10  
牛逼 这种问 都解决了 
1 楼 cuippan 2012-11-14  
niu  

相关推荐

    commons-digester-2.1.jar

    然而,你提到的在Maven中下载的`commons-digester-2.1.jar`无法使用,可能有以下几个原因: 1. **依赖冲突**:Maven项目中可能已经包含了其他版本的`commons-digester`或者与其有依赖关系的库,导致版本不兼容。 2....

    commons-digester3-3.2-API文档-中英对照版.zip

    赠送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; 包含翻译后...

    commons-digester3-3.2-API文档-中文版.zip

    赠送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; 包含翻译后...

    commons-digester.jar

    例如,以下代码展示了如何使用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

    在标题和描述中提到的"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-beanutils.jar+commons-collections.jar+commons-digester.jar+jsf-api.jar+jsf-impl.jar+jstl.jar+standard.jar

    JSF开发所必需包:花了很长时间才收集好,很费时,现已收集好,何不分享给大家,让大家节省时间做点有意义的事情呢?呵呵。...commons-digester.jar jsf-api.jar jsf-impl.jar jstl.jar standard.jar

    commons-digester-2.0.rar源文件及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.7.jar

    commons-digester-1.8.jar

    commons-digester-1.8.jar

    commons-digester源码

    **Apache Commons Digester** 是一个Java库,它允许开发人员定义一套规则,这些规则可以解析XML文档,并根据这些规则在Java对象模型中创建和配置对象。这个库在处理XML到Java对象映射时非常有用,特别是在构建配置...

    利用commons-digester解析xml

    在描述中提到的博客链接(https://aga.iteye.com/blog/218587)可能详细介绍了如何使用Commons Digester来解析XML。通常,使用步骤包括: 1. **引入依赖**:首先,你需要在项目的类路径中包含Apache Commons ...

    commons-digester.jar下载

    Apache Commons Digester遵循Apache License Version 2.0,这是一个非常宽松的开源许可证,允许自由使用、修改和分发代码,只要保留原始的版权和许可通知即可。 总的来说,Apache Commons Digester是一个强大的工具...

    commons-digester-2.0.0.jar

    commons-digester-2.0.0.jar

    commons-digester3-3.2.jar

    commons-digester3-3.2.jar

    commons-digester-1.7.zip

    这个"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包

    本文将围绕标题"quartz-1.6.0/commons-beanutils/commons-digester-1.7 JAR包"展开,详细阐述这些JAR包在Spring中的作用,以及它们各自的核心知识点。 首先,`quartz-1.6.0.jar`是Quartz Scheduler的一个版本。...

Global site tag (gtag.js) - Google Analytics