应用 Castor 把 XML 转换成相应的 JavaBean(一)

之前有一篇用例子演示了 应用 JAXB 把 XML 转换成相应的 JavaBean,现在来看另一款 XML Data Binding 工具 Castor 怎么把 XML 映射成 JavaBean  的,相对于 JAXB 规范性的东西,Castor 的官方网站上关于 Castor 的使用文档我觉得要多些。作为一个 XML Data Binding  工具,Castor 同样提供了 Marshaller 和 Unmarshaller 的功能,它不依赖于注解,还是采用映射文件的方式,像 Hibernate 那样的映射文件。

从 Castor 的官方网站 http://www.castor.org/ 看到它的外围生态系统还是不错的,有 JDO、Maven、Spring、Eclipse Plugin 的支持,也有众多组件用到了它。和其他类似工具一样,Castor 也提供了 XML、Schema 生成 Class 类的功能,但照例这里还是看看先有类的情况,怎么从 XML 中获取相应值。

通常使用 Castor 从 XML 得到 JavaBean 需要一个映射文件,要是 JavaBean 的属性和 XML 中的节点名足够齐整规范就可以省去映射文件,先看不用映射文件的例子:

1. 引入 castor 相关的 jar 包,如果你是用 maven 来管理你的项目依赖(很多都是了吧),可以在 pom.xml 中加入下面依赖:

实际上引入了两个 jar 包,分别是 castor-core-1.3.1.jar 和 castor-xml-1.3.1.jar,非 maven 项目就直接下载或是 ant+ivy 也可以自动管理依赖。

2. Person.java:

3. person.xml 文件:

这里标签名与属性名是相对应的,对于驼峰格式的属性名标签映射为横杠分割形式,如 birthDay 变是 birth-day。这里时间也是用的标准字符串,否则需要加个DateHandler 来转换。

4. Client.java  客户端调用代码:

控制台输出为:Fri Apr 15 00:00:00 CST 2011,说明属性能正确获得,成功从 XML 转换得到 JavaBean。

几点说明:

1)  Java 对象是通过默认构造方法创建的,所以必须提供默认构造函数,属性是通过 setter 方法设置的
2)  引入了 castor 的包,应该把日志输出组件配置上,如 commons-logging 或 slf4j,如此你就可以看到日志中的详细信息
3)  Castor 的 unmarshal 未提供泛型实现,虽然提供了被转换后的 JavaBean 的 Class,但 unmarshal 返回的仍然是 Object,你需要转型,或是包装出一个泛型版本来
4) Castor 中可对 castor.core.properties 和 castor.xml.properties 进行定制,默认配置文件分别为 /org/castor/core/castor.core.properties 和 /org/castor/xml/castor.xml.properties。

castor unmarshal

本篇就列这一个例子吧,关于稍复杂一点的映射还是再开一篇章吧,那请见下一篇:应用 Castor 把 XML 转换成相应的 JavaBean(二)

参考:1. http://www.castor.org/xml-mapping.html
             2. http://castor.org/spring-xml-intro.html
             3. http://www.castor.org/xml-framework.html
             4. http://www.castor.org/reference/html/XML%20data%20binding.html

类别: Java/JEE, XML/DOM. 标签: , , . 阅读(1,051). 订阅评论. TrackBack.

Leave a Reply

Be the First to Comment!

avatar