`
wen866595
  • 浏览: 268421 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Castor XML 之映射模式

    博客分类:
  • XML
XML 
阅读更多

Castor XML 的映射模式可以满足内省模式所不能处理的需求。

在映射模式下,Java 类及属性与XML 文档的元素、属性之间的绑定关系是写在XML形式的文件里的。

下面是Java 类:
public class Author {
	private String firstName, lastName;

	public Author() {
	}

	public Author(String firstName, String lastName) {
		this.firstName = firstName;
		this.lastName = lastName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public String getFirstName() {
		return firstName;
	}

	public String getLastName() {
		return lastName;
	}
}


public class Book {
	private String isbn;
	private String title;
	private List<Author> authors;

	public Book() {
	}

	public Book(String isbn, String title, List<Author> authors) {
		this.isbn = isbn;
		this.title = title;
		this.authors = authors;
	}

	public Book(String isbn, String title, Author author) {
		this.isbn = isbn;
		this.title = title;
		this.authors = new LinkedList<Author>();
		authors.add(author);
	}

	public void setIsbn(String isbn) {
		this.isbn = isbn;
	}

	public String getIsbn() {
		return isbn;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getTitle() {
		return title;
	}

	public void setAuthors(List<Author> authors) {
		this.authors = authors;
	}

	public List<Author> getAuthors() {
		return authors;
	}

	public void addAuthor(Author author) {
		authors.add(author);
	}
}


要解组的数据文件:
<?xml version="1.0" encoding="UTF-8"?>
<book>
	<authors>
		<author>
			<name first="Douglas" last="Preston" />
		</author>
		<author>
			<name first="Lincoln" last="Child" />
		</author>
	</authors>

	<book-info>
		<isbn>9780446618502</isbn>
		<title>The Book of the Dead</title>
	</book-info>
</book>

Author类的映射文件:
<?xml version="1.0"?>
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
                         "http://castor.org/mapping.dtd">

<mapping>
	<class name="liuwh.learn.databind.castor.test3.Author">
		<field name="FirstName" type="java.lang.String">
			<bind-xml name="first" node="attribute" location="name" />
		</field>

		<field name="LastName" type="java.lang.String">
			<bind-xml name="last" node="attribute" location="name" />
		</field>
	</class>
</mapping>

Book类的映射文件
<?xml version="1.0"?>
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
                         "http://castor.org/mapping.dtd">

<mapping>
	<!--  name 属性中指定完全限定的 Java 类名 -->
	<class name="liuwh.learn.databind.castor.test3.Book">
		<!-- xml 属性指定这个类要映射到的 XML 元素 -->
		<map-to xml="book" />

		<!-- name 指定POJO的属性名,不是成员变量名。Castor调用set[PropertyName]()设置值 -->
		<!-- type指定数据类型,必须是全限定类名 -->
		<field name="Title" type="java.lang.String">
			<!-- node 指定是绑定到属性(attribute)还是绑定到元素(element) -->
			<bind-xml name="title" node="element" location="book-info" />
		</field>

		<field name="Isbn" type="java.lang.String">
			<bind-xml name="isbn" node="element" location="book-info" />
		</field>
		<field name="Authors" type="liuwh.learn.databind.castor.test3.Author"
			collection="arraylist">
			<!--
				一个类中的一个字段并不直接映射到与这个类对应的 XML 元素中的数据 — 就需要在 bind-xml 元素中使用 location 属性
				如果绑定到元素数据,它就应该是目标元素的父 元素;如果绑定到属性数据,它就应该是包含这个属性的 元素。
			-->
			<bind-xml name="author" location="authors" />
		</field>
	</class>
</mapping>


根据映射文件解组的代码:
public class BookMapUnmarshaller {
	public static void main(String[] args) {
		Mapping mapping = new Mapping();

		try {
			mapping.loadMapping("book_map.xml");
			mapping.loadMapping("author_map.xml");
			
			XMLContext context = new XMLContext();
			context.addMapping(mapping);

			Unmarshaller unmarshaller = context.createUnmarshaller();

			FileReader reader = new FileReader("bookdata.xml");
			Book book = (Book) unmarshaller.unmarshal(reader);

			System.out.println("Book ISBN: " + book.getIsbn());
			System.out.println("Book Title: " + book.getTitle());
			List authors = book.getAuthors();

			for (Iterator i = authors.iterator(); i.hasNext();) {
				Author author = (Author) i.next();
				System.out.println("Author: " + author.getFirstName() + " "
						+ author.getLastName());
			}

		} catch (Exception e) {
			System.err.println(e.getMessage());
			e.printStackTrace(System.err);
		}
	}
}


输出的结果:
2011-6-2 10:43:54 org.exolab.castor.mapping.Mapping setBaseURL
信息: book_map.xml is not a URL, trying to convert it to a file URL
2011-6-2 10:43:54 org.exolab.castor.mapping.Mapping loadMapping
信息: Loading mapping descriptors from book_map.xml
2011-6-2 10:43:54 org.exolab.castor.mapping.Mapping loadMapping
信息: Loading mapping descriptors from author_map.xml
Book ISBN: 9780446618502
Book Title: The Book of the Dead
Author: Douglas Preston
Author: Lincoln Child


根据映射文件编组的代码:
public class BookMapMarshaller {
	public static void main(String[] args) {
		List<Author> authors = new ArrayList<Author>();
		Author author = new Author("liu", "yi");
		authors.add(author);
		Author author2 = new Author("liu", "er");
		authors.add(author2);

		Book book = new Book("isbn123456", "<<深入计算机操作系统>>", authors);

		Mapping mapping = new Mapping();

		try {
			mapping.loadMapping("book_map.xml");
			mapping.loadMapping("author_map.xml");

			XMLContext context = new XMLContext();
			context.addMapping(mapping);

			Marshaller marshaller = context.createMarshaller();

			FileWriter writer = new FileWriter("map_marshaller.xml");

			marshaller.setWriter(writer);
			marshaller.marshal(book);

		} catch (Exception e) {
			System.err.println(e.getMessage());
			e.printStackTrace(System.err);
		}
	}
}


编组生成的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<book>
	<book-info>
		<title>&lt;&lt;深入计算机操作系统&gt;&gt;</title>
		<isbn>isbn123456</isbn>
	</book-info>
	<authors>
		<author>
			<name first="liu" last="yi" />
		</author>
		<author>
			<name first="liu" last="er" />
		</author>
	</authors>
</book>


使用映射文件也很简单。
具体的映射规则以后再写。
分享到:
评论

相关推荐

    castor解析xml与xsd校验xml

    Castor是一个Java库,它提供了一种方便的方式来映射XML数据到Java对象,反之亦然。这个工具在处理XML文档时特别有用,因为它允许开发者通过简单的对象操作来处理复杂的XML结构,而无需直接处理XML语法。本文将深入...

    castor :Java与xml互转示例---代码

    创建Java对象和XML映射文件 在使用Castor之前,通常需要创建一个映射文件(`.xml`格式),它定义了Java类和XML元素之间的对应关系。例如,假设有一个简单的`Person`类: ```java public class Person { private ...

    castor R/M映射神器

    Castor是ExoLab Group下面的一个开放源代码的项目,它主要实现的是O/R映射功能。它主要API和数据接口为:JDO-like, SQL, OQL, JDBC, LDAP, XML, DSML。它支持分布式目录事务处理和时间;提供处理XML、Directory、...

    castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具

    2. **Java对象到XML的序列化**: 相反,当你有一个Java对象需要转换为XML格式时,Castor会根据映射文件将对象的属性转化为XML元素。 3. **映射文件生成**: 描述中的"一键自动生成castor插件mapping文件"是指能够根据...

    javabean 转换 xml映射文件工具

    总的来说,JavaBean到XML映射文件工具是一个提高开发效率的实用工具,它简化了数据在Java对象和XML文档之间的转换,特别是在与Castor框架集成时。理解这个工具的工作原理和使用方法对于任何需要处理数据序列化的Java...

    castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具1.2

    "castor插件java对象和XML自动绑定mapping文件生成"是Castor的核心功能之一。映射文件(mapping file)是描述Java类和XML元素之间对应关系的配置文件,通常以.xml扩展名。通过这个映射文件,Castor可以知道如何在...

    Castor的使用,如何将java object转换为xml

    Castor的核心功能是提供一种方式来定义Java类和XML元素之间的映射关系,这种映射关系被称为“Mapping文件”。通过Mapping文件,开发者可以控制Java对象到XML的转换细节,如字段名的映射、类型转换和嵌套结构的处理。...

    castor1.4 xsd生成java

    7. **替代方案**:随着技术的发展,如JAXB(Java Architecture for XML Binding)和XStream等工具也提供了类似的功能,它们可能更适合处理现代的XML映射需求。 8. **最佳实践**:在使用Castor时,建议保持XSD文件的...

    castor 学习文档英文原版

    XML映射文件是Castor数据绑定的基石,通过定义映射规则,它描述了如何将XML模式(schema)转换为Java类,或者反向操作。该节还介绍了映射文件的使用模式和xsi:type属性的用法,以及如何通过Location属性进行映射优化...

    castor castor castor 资料

    2. **映射机制**:Castor使用XML映射文件来定义Java类和XML元素之间的对应关系。通过这种方式,开发者可以自定义对象到XML的转换规则,比如字段名的映射、复杂类型的处理等。 3. **支持多种数据类型**:Castor支持...

    castor样例xml to bean和bean to xml样例

    Castor是一个Java库,用于将XML数据映射到Java对象(即bean)和从Java对象反向映射回XML。这个“castor-1.3.1-examples.zip”文件包含了一些示例,展示了如何使用Castor进行XML到Bean以及Bean到XML的转换。这个过程...

    xml与java对象映射

    - **Castor**:Castor提供了XML到Java对象的映射,支持复杂的数据结构,包括集合和嵌套对象。 - **XML Beans**:XML Beans是由Apache组织提供的,它允许开发者通过Java类型系统直接访问XML内容,同时支持XML ...

    castor-1.3.2.zip

    4. **JavaBeans支持**:对于没有明确Java类的XML数据,Castor可以使用JavaBeans模式进行解析。这样,即使没有预先定义的类,也能处理XML数据。 5. **灵活的映射**:Castor提供了多种映射选项,比如一对一、一对多、...

    xml的一个解析工具castor

    7. **灵活的映射策略**:用户可以选择使用XML映射文件或者注解来定义XML与Java对象之间的映射关系,满足不同项目需求。 8. **与其他技术集成**:Castor可以方便地与Spring框架、Hibernate等其他Java技术集成,增强...

    《用Castor 处理XML文档》学习笔记

    Castor提供了一个映射机制,允许开发者定义XML元素和Java类之间的关系,这个过程被称为XML绑定。一旦绑定完成,Castor可以自动将XML文档解析为Java对象,反之亦然,极大地简化了数据操作。 1. **安装与配置** 在...

    castor1-2(java and xml 数据绑定过程所需数据包)

    Castor是Java中一个强大的数据绑定框架,它允许开发者将XML文档与Java对象之间进行映射,从而实现XML数据的序列化和反序列化。在Java应用开发中,处理XML数据时,通常需要将XML文件内容转换为Java对象,或者将Java...

    Castor (二) -- 自定义映射

    Castor是一个Java库,它允许开发人员将XML文档和Java对象之间进行映射,从而实现数据的序列化和反序列化。这种功能对于数据交换、持久化或配置管理等场景非常有用。在本篇博文中,我们可能讨论的是如何自定义这些...

    castor1.3 完整jar包

    Castor的核心功能在于它的对象-XML绑定(Object-XML Binding)机制,它能够自动生成Java类到XML Schema的映射,反之亦然。这样,开发者可以轻松地将复杂的Java对象序列化为XML,或者从XML文档中反序列化成Java对象。...

    castor-1.2解析XML

    是个不错的XML解析工具。 1、xml格式文件的用法,我们学过的xml有两种用法:一,作为配置文件。二、作为数据存储文件。...2、这个工具的功能:能够把xml文件存储的数据和pojo对象进行映射。我们暂且把这种叫做:OXM。

Global site tag (gtag.js) - Google Analytics