应用 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 把 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 永久链接 https://yanbin.blog/castor-xml-to-javabean-1/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
从 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 中加入下面依赖:
1<dependency>
2 <groupId>org.codehaus.castor</groupId>
3 <artifactId>castor-xml</artifactId>
4 <version>1.3.1</version>
5</dependency>实际上引入了两个 jar 包,分别是 castor-core-1.3.1.jar 和 castor-xml-1.3.1.jar,非 maven 项目就直接下载或是 ant+ivy 也可以自动管理依赖。
2. Person.java:
1package cc.unmi.castor;
2
3import java.util.Date;
4
5/**
6 * @author Unmi Qiu
7 * CreateTime: Apr 23, 2011
8 */
9public class Person {
10 private String name;
11 private Date birthDay;
12
13 public String getName() {
14 return name;
15 }
16 public void setName(String name) {
17 this.name = name;
18 }
19 public Date getBirthDay() {
20 return birthDay;
21 }
22 public void setBirthDay(Date birthDay) {
23 this.birthDay = birthDay;
24 }
25}3. person.xml 文件:
1<?xml version="1.0" encoding="UTF-8"?>
2<person>
3 <name>Ryan 'Mad Dog' Madden</name>
4 <birth-day>2011-04-15T00:00:00.000+08:00</birth-day>
5</person>这里标签名与属性名是相对应的,对于驼峰格式的属性名标签映射为横杠分割形式,如 birthDay 变是 birth-day。这里时间也是用的标准字符串,否则需要加个DateHandler 来转换。
4. Client.java 客户端调用代码:
1package cc.unmi.castor;
2
3import java.io.InputStream;
4
5import org.exolab.castor.xml.MarshalException;
6import org.exolab.castor.xml.Unmarshaller;
7import org.exolab.castor.xml.ValidationException;
8import org.xml.sax.InputSource;
9
10public class Client {
11
12 public static void main(String[] args) throws MarshalException, ValidationException {
13 InputStream xmlInputStream = ClassLoader.getSystemResourceAsStream("person.xml");
14 Unmarshaller unmarshaller = new Unmarshaller(Person.class);
15 InputSource inputSource = new InputSource(xmlInputStream);
16 Person person = (Person)unmarshaller.unmarshal(inputSource);
17 System.out.println(person.getBirthDay());
18 }
19}控制台输出为: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 把 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 永久链接 https://yanbin.blog/castor-xml-to-javabean-1/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。