`
cyril0513
  • 浏览: 15560 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于Apache betwixt组件的使用

阅读更多
最近研究了一下公司的底层框架的实现,发现公司对自定义的XML转换为javabean使用了apache betwixt组件,于是乎,就研究了一下,发现这个组件挺强大的。
环境准备:
必不可少的四个jar包
commons-betwixt.jar
commons-degester.jar
commons-collections.jar
commons-beanutils.jar
这里简单的例子就直接去apache的官网上看吧,这里介绍一下实战型复杂的用法.
以下是三个javaBean的代码:
public class SysCfgModule implements Serializable {

	public SysCfgModule()
	{
		requests=new ArrayList();
	}
	
	public List getRequests() {
		return requests;
	}

	//一定要有这个add方法,否则会抱警告,无法创建java.util.list对象,因为我们是采用的add方法,将xml中的单个request添加到requests中
	public void addRequest(SysCfgRequest request)
    {
        requests.add(request);
    }

	public String getMessageKey() {
		return messageKey;
	}

	public void setMessageKey(String messageKey) {
		this.messageKey = messageKey;
	}

	public String getUrlPrefix() {
		return urlPrefix;
	}

	public void setUrlPrefix(String urlPrefix) {
		this.urlPrefix = urlPrefix;
	}

	public String getRoles() {
		return roles;
	}

	public void setRoles(String roles) {
		this.roles = roles;
	}

	public String getDefaultValidator() {
		return defaultValidator;
	}

	public void setDefaultValidator(String
			defaultValidator) {
		this.defaultValidator = defaultValidator;
	}

	private static Log logger = LogFactory.getLog(SysCfgModule.class);
	private String messageKey;
	private String urlPrefix;
	private String roles;
	private String defaultValidator;
	private List requests;

}

public class SysConfigs {
	//这里面不要对addModule重载,否则会有问题。
	public void addModule(SysCfgModule newModule) throws Exception {
		// System.out.println(newModule);
		System.out.println("1111");
		System.out.println(newModule.getDefaultValidator());
		System.out.println(newModule.getRequests().size());
	}
	
	public void addModule() throws Exception {
		System.out.println("-------------");
	}

//	public void addModule(String type) throws Exception {
//		System.out.println("hello ");
//		System.out.println(type);
//	}

	

}


public class SysCfgRequest {
	private String path;
	private String validatorParameter;
	private String defaultValidator;

	public String getPath() {
		return path;
	}

	public void setPath(String path) {
		this.path = path;
	}

	public String getValidatorParameter() {
		return validatorParameter;
	}

	public void setValidatorParameter(String validatorParameter) {
		this.validatorParameter = validatorParameter;
	}

	public String getDefaultValidator() {
		return defaultValidator;
	}

	public void setDefaultValidator(String defaultValidator) {
		this.defaultValidator = defaultValidator;
	}

}

然后再看我们的design.xml是如何定义的:
<configs xmlns="http://www.example.org/design-config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.example.org/design-config ../../design.xsd ">
	<module messageKey="km-answer:home.nav.kmAnswer" urlPrefix="/km/answer/"
		defaultValidator="roleValidator(role=ROLE_KMANSWER_DEFAULT)">
		<request
			path="km_doc_template/kmDocTemplate*"
			validatorParameter="recid=fdId,model=com.landray.kmss.km.doc.model.KmDocTemplate,adminRoleName=ROLE_KMDOC_CATEGORY_MAINTAINER">
		</request>
	</module>
</configs>

相信从这个XML我们就大概能看的出,这个XML和那三个对象的封装关系了吧,然后我们需要指定className+.betwixt文件,这是因为我们需要自定义封装。
一定要注意,这个className一定是我们需要映射的的javeBean的类名,SysCfgRequest.betwixt
下面贴出文件的如何定义:
SysConfigs.betwixt
<?xml version="1.0" encoding="UTF-8"?>
<info primitiveTypes="attribute">
	<element name="configs">
		<element
			name="module" property="modules"/>
				<addDefaults />
	</element>
</info>

SysCfgModule.betwixt
<?xml version="1.0" encoding="UTF-8"?>
<info primitiveTypes="attribute">
	<element name="module">
	    <element name="request" property="requests"/>
		<addDefaults />
	</element>
</info>

SysCfgRequest.betwixt
<?xml version="1.0" encoding="UTF-8"?>
<info primitiveTypes="attribute">
	<element name="request">
		<element
			name="query"
			property="querys" />
		<addDefaults />
	</element>
</info>

然后是如何去调用:
public static void paseXmlUseApacheComponent() {

		BeanReader reader = new BeanReader();
		try {
			reader.registerBeanClass(SysConfigs.class);
			reader.getXMLIntrospector().getConfiguration()
					.setAttributesForPrimitives(false);
			SysConfigs p = (SysConfigs) reader.parse(Thread.currentThread()
					.getContextClassLoader()
					.getSystemResourceAsStream(("design.xml")));
			System.out.println(p);
			// System.out.println(p.getType());
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

我总结的几个小小的使用心得:

1:例如在sysConfig中需要添加sysCfgModule对象,那么我们在他们各自对应的element中所指定的名字都要一至,例如在sysCfgModule.betwixt中element叫“module”,那么在sysConfigs.betwixt也应该叫"module",必须跟add后面的名字保持一致,否则它找不到
2:值得注意的是不要去重载,这个add方法,否则会有问题。
3:因为javaBean默认是使用set作为默认的赋值方法,如果需要使用add,则需要在.betwixt中使用<addDefaults />指定。
4:在.betwixt文件中property="****",不是必须的,他的意思是对应类中的某个属性,例如property=requests,如果没有这个,那么requests这个列表中不会添加元素。
*
分享到:
评论

相关推荐

    apache web组件使用

    使用Apache Web组件时,首先要了解每个组件的用途,然后根据项目需求选择合适的组件。通常,可以通过阅读官方文档、示例代码和社区论坛来学习如何正确使用这些组件。例如,如果你需要处理用户上传的文件,那么...

    apache-commons源码及jar文件

    Apache Commons是一个非常有用的工具包,解决各种实际的通用问题。(附件中提供了该工具包的jar包,及源文件以供研究) BeanUtils Commons-BeanUtils 提供对 Java 反射和自省API的包装 Betwixt Betwixt提供将 ...

    apache.commons所有jar包

    Apache Commons 是一个由 Apache 软件基金会维护的...了解并熟练使用Apache Commons的组件,可以极大地提高开发效率和代码质量。在实际项目中,根据需求选择合适的Apache Commons模块,能够使代码更简洁、更易于维护。

    apache-common最全的jar包

    在项目中,可以根据需要选择合适的 Apache Commons 组件来引入,以减少重复造轮子的工作,提升开发效率。在理解和使用这些库时,需要了解它们提供的具体功能,熟悉 API 的用法,并注意版本兼容性,以确保项目稳定...

    apache commons jar包

    9. **commons-discovery**:支持服务发现,使得Java组件能够动态地查找和使用其他服务。 这些JAR文件可以单独或组合使用,以满足各种开发需求。例如,如果你正在开发一个Web应用,可能需要`commons-fileupload`来...

    orgapachecommons.zip

    标题中的"orgapachecommons.zip"似乎是一个包含Apache Commons组件的压缩文件,这些组件是Java编程中广泛使用的工具库。Apache Commons项目是由Apache软件基金会维护的一系列实用工具类库,旨在提供各种通用功能,以...

    commons.rar

    这个名为"commons.rar"的压缩包包含了一系列与Apache Commons相关的jar包,具体包括"commons-beanutils-1.8.0"和"commons-betwixt-0.8"等。这些jar包是Java开发者常用于提升开发效率和代码质量的库。 首先,让我们...

    commons jar

    "commons jar"是一个涵盖多个Apache Commons库的集合,这些库是Java开发中常用的工具类库。Apache Commons项目致力于提供可重用的Java组件...通过合理使用这些Apache Commons组件,可以提高代码的可维护性和可扩展性。

    Jakarta Commons Online Bookshelf

    1. **浏览网页与HttpClient**:介绍如何使用HttpClient组件进行网络请求,包括获取资源、解析响应等。 2. **文件上传与FileUpload**:详解FileUpload组件,教授用户如何处理HTTP POST请求中的文件上传。 3. **协议...

    apache commons工具集代码详解

    下面对Apache Commons工具集中的部分组件进行详细介绍: 1. BeanUtils:提供了对于JavaBean进行各种操作的工具类,例如克隆对象、属性复制等等。 BeanUtils可以通过Java的反射机制来实现对象的克隆和属性复制。...

    commons包介绍1

    Apache Commons 是一系列小型实用工具库,它为Java开发者提供了丰富的组件和类库,极大地扩展了标准Java库的功能。这些组件涵盖了各种领域,如数据编码、集合操作、配置管理、网络通信、XML处理、脚本执行等。以下是...

    commons所有jar包

    Apache Commons 是一个由Apache软件基金会开发的Java库项目,它为Java程序员提供了各种实用工具和组件,以简化常见的编程任务。这些jar包是Apache Commons项目的一部分,每个都专注于特定的功能领域。以下是关于这些...

    Jakarta commons docs API CHM 格式

    commons-betwixt 这个组件提供一个XML自省(introspection)机制用来把Java Bean映射到XML文档 commons-chain 提供实现组织复杂的处理流程的“责任链模式” commons-cli 命令行参数解析 , 由 Werken, Avalon 和 Optz...

    比较全面的:Jakarta-commons jar包(附: chm参考手册 & 资源简介)

    commons-betwixt 这个组件提供一个XML自省(introspection)机制用来把Java Bean映射到XML文档 commons-chain 提供实现组织复杂的处理流程的“责任链模式” commons-cli 命令行参数解析 , 由 Werken, Avalon 和 Optz...

    JAKARTA COMMONS

    Apache Jakarta Commons 是一组由 Apache 软件基金会提供的 Java 库,这些库旨在解决常见的编程问题,提供便捷的功能,减少开发人员重复编写基础代码的工作。Jakarta Commons 包含了许多子项目,每个子项目专注于...

Global site tag (gtag.js) - Google Analytics