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

紧接前一篇 应用 Castor 把 XML 转换成相应的 JavaBean(一),本例稍显复杂一些,也就是要使用到映射文件,更复杂的 JavaBean、XML 数据类型和结构,引入自定的 FieldHandler,还有存在 Namespace 的情形。

关于如何使用 Castor 来把 XML 映射成 JavaBean 请着重阅读这个链接 http://www.castor.org/reference/html/XML%20data%20binding.html 中的内容,里面有说明支持的类型,如何定义自己的类型 Handler 及配置 Handler 的属性,mapping.xml 文件怎么写及各部份的意义;还有 castor.properties 的配置,比其中的 suppressNamespaces 为 true 时可以忽略掉 Namespace,默认为 false.

直接看例子吧:

1. persons.xml,这里放了一个 Namespace,并定义了一个 Address 类型,还使得节点名与 Bean 的属性名不一致:

2. PersonList.java:

3. Person.java:

4. Address.java:

5. AddressHandler.java,自定义的类型处理器,用于在 XML 与 Bean 属性间转换特定的类型:

这个 Handler 可没有 JAXB 相对应的 Adapter 那么好理解,要复杂的多,习惯下吧。

6. mapping.xml,映射文件,应该能看到它所表达的意思:

上面有几点得好好看清楚下:

1) class 节点用 name 指定类型
2) field 节点用 type 指定类型
3) node 属性有是 element 也有对应于 attribute
4) address 的 type 为 string,而不是 cc.unmi.castor.Address,写成后者会报错的。
5) 对于 type 节点有 Namespace 时,写法确实很啰嗦的。不过如果在 castor.properties 的配置 suppressNamespaces 为 true 则可以忽略掉 Namespace。

7. Client.java,最后是客户端调用代码:

执行上面的代码控制台输出结果为:

[Unmi,st1|st2,worker, Fantasia,sz|gd,yuan]

结果正确。

最后还是说要用好下 Castor,请仔细阅读 http://www.castor.org/reference/html/XML%20data%20binding.html。原以为 Castor 的资料比 JAXB 少,现在才知道错了。而且就这样稍加深入的了解了下,发现 Castor 确实够强悍的。

参考: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. 标签: , , , . 阅读(730). 订阅评论. TrackBack.

Leave a Reply

Be the First to Comment!

avatar
wpDiscuz