- 浏览: 8814 次
- 性别:
- 来自: 武汉
最新评论
《用Castor 处理XML文档》学习笔记
——Castor可以完成Java和XML的相互转换
前面有介绍过json-lib这个框架,在线博文:
http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html
以及Jackson这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html
它们都可以完成Java对象到XML的转换,但是还不是那么的完善。还有XStream对JSON及XML的支持,它可以对JSON或XML的完美转换。在线博文:
http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html
这里将介绍Castor来完成Java对象到xml的相互转换。它是怎么样转换的?和前面不同的是castor可以用一个mapping.xml文件来描述转换后的Java对象的xml基本形态,类似于xStream的annotation,这点还是非常不错的。下面我们就来看看Castor是怎么样完成Java对象到XML之间的相互转换吧。
原文地址
用Castor 处理XML文档
http://www.cnblogs.com/hoojo/archive/2011/04/25/2026819.html
以下是学习笔记:
1,改造成Maven工程后的pom.xml文件,这里要注意,castor-1.3.3.jar虽然可以在Maven仓库里面看到,但不能下载,我们需要的jar在床上castor-xml-1.3.3.jar里:
2,完整的CastorTest.java文件:
3,运行结果:
4,git源代码地址:
[url]https://git.oschina.net/coderdream/castor-demo [/url]
5,源代码下载:
前面有介绍过json-lib这个框架,在线博文:
http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html
以及Jackson这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html
它们都可以完成Java对象到XML的转换,但是还不是那么的完善。还有XStream对JSON及XML的支持,它可以对JSON或XML的完美转换。在线博文:
http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html
这里将介绍Castor来完成Java对象到xml的相互转换。它是怎么样转换的?和前面不同的是castor可以用一个mapping.xml文件来描述转换后的Java对象的xml基本形态,类似于xStream的annotation,这点还是非常不错的。下面我们就来看看Castor是怎么样完成Java对象到XML之间的相互转换吧。
原文地址
用Castor 处理XML文档
http://www.cnblogs.com/hoojo/archive/2011/04/25/2026819.html
以下是学习笔记:
1,改造成Maven工程后的pom.xml文件,这里要注意,castor-1.3.3.jar虽然可以在Maven仓库里面看到,但不能下载,我们需要的jar在床上castor-xml-1.3.3.jar里:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.coderdream</groupId> <artifactId>castor-demo</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>castor-demo Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <plugin.compiler.version>3.1</plugin.compiler.version> <junit.version>4.11</junit.version> <log4j.version>1.2.12</log4j.version> <commons.io.version>1.3.2</commons.io.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.codehaus.castor</groupId> <artifactId>castor-xml-diff</artifactId> <version>1.3.3</version> </dependency> </dependencies> <build> <finalName>castor-demo</finalName> </build> </project>
2,完整的CastorTest.java文件:
package com.hoo.test; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.exolab.castor.mapping.Mapping; import org.exolab.castor.mapping.MappingException; import org.exolab.castor.xml.MarshalException; import org.exolab.castor.xml.Marshaller; import org.exolab.castor.xml.Unmarshaller; import org.exolab.castor.xml.ValidationException; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.hoo.entity.Account; import com.hoo.entity.AccountArray; import com.hoo.entity.Birthday; import com.hoo.entity.ListBean; import com.hoo.entity.MapBean; /** * <b>function:</b>Castor完成Java对象到XML的相互转换 依赖jar: castor-1.3.jar castor-1.3-core.jar junit-4.8.2.jar log4j-1.2.16.jar * commons-logging.jar * * @author hoojo * @createDate 2011-4-21 下午07:57:26 * @file CastorTest.java * @package com.hoo.test * @project WebHttpUtils * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class CastorTest { private Account bean = null; private Mapping mapping = new Mapping(); private StringWriter writer = null; private StringReader reader = null; @Before public void init() { bean = new Account(); bean.setAddress("北京"); bean.setEmail("email"); bean.setId(1); bean.setName("jack"); Birthday day = new Birthday(); day.setBirthday("2010-11-22"); bean.setBirthday(day); try { /** * 加载mapping.xml,此文件是对需要转换的Java对象的配置描述, 即:转换后的Java对象的xml内容的转换规则 */ mapping.loadMapping(System.getProperty("user.dir") + "\\src\\main\\java\\mapping.xml"); // mapping.loadMapping("\\" + "mapping.xml"); } catch (IOException e) { e.printStackTrace(); } catch (MappingException e) { e.printStackTrace(); } } @After public void destory() { bean = null; mapping = null; try { if (writer != null) { writer.flush(); writer.close(); } if (reader != null) { reader.close(); } } catch (IOException e) { e.printStackTrace(); } System.gc(); } public void fail(Object o) { System.out.println(o); } public void failRed(Object o) { System.err.println(o); } /** * <b>function:</b>将Javabean编组,转换成XML * * @author hoojo * @createDate 2011-4-22 下午12:08:48 */ @Test public void writeBean2XML() { writer = new StringWriter(); try { // 编组 Marshaller.marshal(bean, writer); fail(writer); } catch (MarshalException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * <b>function:</b>将List转换成xml * * @author hoojo * @createDate 2011-4-22 下午12:11:00 */ @Test public void writeList2XML() { writer = new StringWriter(); List<Account> list = new ArrayList<Account>(); list.add(bean); Account bean2 = new Account(); bean2.setName("tom"); bean2.setId(223); list.add(bean2); try { Marshaller.marshal(list, writer); fail(writer); } catch (MarshalException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * <b>function:</b>将Array数组转换成XML * * @author hoojo * @createDate 2011-4-22 下午12:11:25 */ @Test public void writeArray2XML() { writer = new StringWriter(); Account[] acc = new Account[2]; acc[0] = bean; bean = new Account(); bean.setName("tom"); bean.setId(223); acc[1] = bean; try { Marshaller.marshal(acc, writer); fail(writer); } catch (MarshalException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * <b>function:</b>将Java常用类型编组成xml * * @author hoojo * @createDate 2011-4-22 下午12:11:44 */ @Test public void writeObject2XML() { writer = new StringWriter(); try { Marshaller.marshal(true, writer); Marshaller.marshal(9527, writer); Marshaller.marshal(2.2f, writer); Marshaller.marshal(1.11d, writer); Marshaller.marshal("lucy", writer); Marshaller.marshal("hello castor".getBytes(), writer); Marshaller.marshal(new char[] { 'a', 'b', 'c' }, writer); Marshaller.marshal(new String[] { "hi", "spring", "castor" }, writer); fail(writer); } catch (MarshalException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * <b>function:</b>将XML内容,解组成JavaBean * * @author hoojo * @createDate 2011-4-22 下午12:12:14 */ @Test public void readXML2Bean() { String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<account id=\"1\"><address>北京</address>" + "<name>jack</name><email>email</email>" + "<birthday><birthday>2010-11-22</birthday></birthday></account>"; reader = new StringReader(xml); try { // 解组 Account account = (Account) Unmarshaller.unmarshal(Account.class, reader); fail(account); } catch (MarshalException e) { e.printStackTrace(); } catch (ValidationException e) { e.printStackTrace(); } } /** * <b>function:</b>将XML内容解组成Java对象 * * @author hoojo * @createDate 2011-4-22 下午12:13:28 */ @Test public void bean4Mapping2XML() { writer = new StringWriter(); try { // 编组 Marshaller mar = new Marshaller(writer); mar.setMapping(mapping); mar.marshal(bean); fail(writer); // 解组 reader = new StringReader(writer.toString()); Unmarshaller unmar = new Unmarshaller(Account.class); unmar.setMapping(mapping); Account account = (Account) unmar.unmarshal(reader); fail(account); } catch (MarshalException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } @Test public void readBean4Mapping2XML() { String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<Account id=\"2241\"><name>jack</name><email>email</email><address>北京</address><生日 birthday=\"2010-11-22\"/></Account>"; try { reader = new StringReader(xml); Unmarshaller unmar = new Unmarshaller(Account.class); unmar.setMapping(mapping); Account account = (Account) unmar.unmarshal(reader); fail(account); } catch (MarshalException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * <b>function:</b>将XML内容解组成Java的Array * * @author hoojo * @createDate 2011-4-22 下午12:14:50 */ @Test public void array4Mapping2XML() { writer = new StringWriter(); Account[] acc = new Account[2]; acc[0] = bean; bean = new Account(); bean.setName("tom"); bean.setId(223); acc[1] = bean; AccountArray array = new AccountArray(); array.setAccounts(acc); try { Marshaller mar = new Marshaller(writer); mar.setMapping(mapping); mar.marshal(array); fail(writer); reader = new StringReader(writer.toString()); Unmarshaller unmar = new Unmarshaller(AccountArray.class); unmar.setMapping(mapping); array = (AccountArray) unmar.unmarshal(reader); fail(array.getSize()); fail(array.getAccounts()[0]); fail(array.getAccounts()[1]); } catch (MarshalException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * <b>function:</b>xml转换成Java的Map * * @author hoojo * @createDate 2011-4-22 下午12:15:18 */ @Test public void map4Mapping2XML() { writer = new StringWriter(); MapBean mapBean = new MapBean(); Map<String, Object> map = new HashMap<String, Object>(); map.put("No1", bean); bean = new Account(); bean.setName("tom"); bean.setId(223); map.put("No2", bean); mapBean.setMap(map); try { Marshaller mar = new Marshaller(writer); mar.setMapping(mapping); mar.marshal(mapBean); fail(writer); reader = new StringReader(writer.toString()); Unmarshaller unmar = new Unmarshaller(MapBean.class); unmar.setMapping(mapping); mapBean = (MapBean) unmar.unmarshal(reader); fail(mapBean.getMap()); } catch (MarshalException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * <b>function:</b>List到XML的相互转换 * * @author hoojo * @createDate 2011-4-22 下午12:16:04 */ @Test public void listForMapping2XML() { writer = new StringWriter(); List<Account> list = new ArrayList<Account>(); list.add(bean); bean = new Account(); bean.setName("tom"); bean.setId(223); list.add(bean); ListBean listBean = new ListBean(); listBean.setList(list); try { Marshaller mar = new Marshaller(writer); mar.setMapping(mapping); mar.marshal(listBean); fail(writer); reader = new StringReader(writer.toString()); Unmarshaller unmar = new Unmarshaller(ListBean.class); unmar.setMapping(mapping); listBean = (ListBean) unmar.unmarshal(reader); fail(listBean.getList().size()); for (Account acc : (List<Account>) listBean.getList()) { fail(acc); } } catch (MarshalException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
3,运行结果:
<?xml version="1.0" encoding="UTF-8"?> <map-bean><map xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:java="http://java.sun.com" xsi:type="java:org.exolab.castor.mapping.MapItem"><key xsi:type="java:java.lang.String">No2</key><value id="223" xsi:type="Account"><name>tom</name></value></map><map xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:java="http://java.sun.com" xsi:type="java:org.exolab.castor.mapping.MapItem"><key xsi:type="java:java.lang.String">No1</key><value id="1" xsi:type="Account"><name>jack</name><email>email</email><address>北京</address><生日 birthday="2010-11-22"/></value></map></map-bean> {No2=223#tom#null#null#null, No1=1#jack#email#北京#2010-11-22} <?xml version="1.0" encoding="UTF-8"?> <list-bean><list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="1" xsi:type="Account"><name>jack</name><email>email</email><address>北京</address><生日 birthday="2010-11-22"/></list><list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="223" xsi:type="Account"><name>tom</name></list></list-bean> 2 1#jack#email#北京#2010-11-22 223#tom#null#null#null <?xml version="1.0" encoding="UTF-8"?> <account-array size="2"><accounts id="1"><name>jack</name><email>email</email><address>北京</address><生日 birthday="2010-11-22"/></accounts><accounts id="223"><name>tom</name></accounts></account-array> 2 1#jack#email#北京#2010-11-22 223#tom#null#null#null <?xml version="1.0" encoding="UTF-8"?> <boolean>true</boolean><?xml version="1.0" encoding="UTF-8"?> <integer>9527</integer><?xml version="1.0" encoding="UTF-8"?> <float>2.2</float><?xml version="1.0" encoding="UTF-8"?> <double>1.11</double><?xml version="1.0" encoding="UTF-8"?> <string>lucy</string><?xml version="1.0" encoding="UTF-8"?> <[-b>aGVsbG8gY2FzdG9y</[-b><?xml version="1.0" encoding="UTF-8"?> <array><character>a</character><character>b</character><character>c</character></array><?xml version="1.0" encoding="UTF-8"?> <array><string>hi</string><string>spring</string><string>castor</string></array> <?xml version="1.0" encoding="UTF-8"?> <Account id="1"><name>jack</name><email>email</email><address>北京</address><生日 birthday="2010-11-22"/></Account> 1#jack#email#北京#2010-11-22 2241#jack#email#北京#2010-11-22 <?xml version="1.0" encoding="UTF-8"?> <array><account id="1"><address>北京</address><email>email</email><name>jack</name><birthday><birthday>2010-11-22</birthday></birthday></account><account id="223"><name>tom</name></account></array> <?xml version="1.0" encoding="UTF-8"?> <account id="1"><address>北京</address><email>email</email><name>jack</name><birthday><birthday>2010-11-22</birthday></birthday></account> 1#jack#email#北京#2010-11-22 <?xml version="1.0" encoding="UTF-8"?> <array-list><account xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:java="http://java.sun.com" id="1" xsi:type="java:com.hoo.entity.Account"><address>北京</address><email>email</email><name>jack</name><birthday><birthday>2010-11-22</birthday></birthday></account><account xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:java="http://java.sun.com" id="223" xsi:type="java:com.hoo.entity.Account"><name>tom</name></account></array-list>
4,git源代码地址:
[url]https://git.oschina.net/coderdream/castor-demo [/url]
5,源代码下载:
- castor-demo.7z (5.1 KB)
- 下载次数: 0
相关推荐
Castor是一个Java库,它提供了一种方便...总结来说,Castor结合XSD提供了强大的XML处理能力,能够简化XML数据的解析和验证,提高数据的准确性和一致性。理解并熟练运用这两个工具,是Java开发中处理XML数据的关键技能。
在Castor学习文档中,首先介绍了XML框架,它是Castor的核心组件。文档的1.1.1节到1.1.6节涵盖了Castor XML的数据绑定框架的基本概念,例如框架的引入、使用现有类/对象进行映射、类描述符的使用以及XML上下文的创建...
Unmarshall与Marshall使用的castor-xml-1.3.2.jar包
这个插件的主要目的是简化XML处理,特别是在Java应用程序中。它通过创建映射文件(Mapping Files)来定义Java对象和XML元素之间的关系,使得数据转换过程更加自动化。 Castor的核心功能包括: 1. **XML到Java对象...
在这个学习笔记中,我们将深入探讨Castor的核心功能、使用场景以及其与XML绑定相关的技术。 1. Castor的基本概念 Castor的核心思想是通过XML绑定(XML Binding)技术,将XML文档结构与Java类结构对应起来。它通过...
castor解析xml
Castor是一个开源的Java库,它提供了一个强大的框架,用于在Java对象和XML文档之间进行映射和转换。这个库的使用使得数据序列化和反序列化变得简单,尤其是在处理复杂的对象模型时。本文将深入探讨如何使用Castor在...
Castor实现XML与Java的互转,是目前非常流行的WSDL中常用的方法。有兴趣的可以下载看看
9. **学习资源**:为了深入学习和使用Castor,可以查阅官方文档、在线教程和论坛讨论,以获取示例代码和常见问题解答。 通过以上知识点,我们可以了解到,Castor 1.4版本为XML Schema到Java类的转换提供了一个高效...
- 支持JAXB和JDOM:Castor可以与Java Architecture for XML Binding (JAXB) 和Java Document Object Model (JDOM) 集成,扩大其在XML处理中的应用范围。 4. 示例代码: 在“castor-1.3.1-examples.jar”中,可能...
2. **处理复杂结构**:如果XML文档有复杂的嵌套结构,Castor能够自动处理这些关系,将XML节点转化为对应的Java对象,包括集合类、继承结构等。 **四、Castor的其他特性** 1. **类型转换**:Castor支持多种数据类型...
解析wsdl文件的好帮手,和jdom.jar,wsdl4j.jar组合,能很好的解吸wsdl文件。
Castor 项目采用 BSD 类型的证书,因此可在任何类型的应用程序(包括完整版权的项目)中使用。 Castor 实际上仅仅有 XML 数据绑定,它还支持 SQL 和 LDAP 绑定
2. **映射机制**:Castor使用XML映射文件来定义Java类和XML元素之间的对应关系。通过这种方式,开发者可以自定义对象到XML的转换规则,比如字段名的映射、复杂类型的处理等。 3. **支持多种数据类型**:Castor支持...
castor-0.9.5.3-xml.jar,java和xml互相转换所使用的JAR
总之,"castor插件java对象和XML自动绑定mapping文件生成和java对象一键生成工具1.2"是提升XML处理效率的利器,它简化了Java和XML之间的交互,使得开发过程更为流畅。X2MUTIL可能是该工具包的主程序或执行文件,用于...
在Java中,解析XML文档有多种方式,其中SAX(Simple API for XML)阅读器是一种流行的选择,它以事件驱动的方式处理XML文档,具有内存占用小、处理速度快的优点。 SAXReader是DOM4J库中的一个类,它提供了SAX解析...
它提供了一种将XML文档转换为Java对象以及将Java对象序列化为XML的机制,从而简化了XML处理并促进了Java应用程序与XML数据之间的交互。下面将详细介绍Castor框架、jar包和源代码的相关知识点。 1. **Castor框架核心...