`

JAXB_Java Architecture For XML Binding

    博客分类:
  • j2se
 
阅读更多

1:写好XML文件且根据XML文件写出XSD文件:
(或者使用Trang-[java -jar trang.jar source.xml dist.xsd])
XML:
<?xml version="1.0" encoding="UTF-8"?>
<booking xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<company name="ACME Consulting">
		<address>10 Coyote Avenue, Arizona, USA</address>
		<contact name="Duke" email="duke@acme.com"
			telephone="1234567890" />
	</company>
	<student firstName="Jane" surname="Dow" />
	<student firstName="John" surname="Doe" />
</booking>

XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<xsd:element name="booking" type="courseBooking" />
	<xsd:complexType name="courseBooking">
		<xsd:sequence>
			<xsd:element ref="company" />
			<xsd:element ref="student" minOccurs="1"
				maxOccurs="unbounded" />
		</xsd:sequence>
		<xsd:attribute name="courseReference" type="xsd:string"
			use="required" />
		<xsd:attribute name="courseDate" type="xsd:date" use="required" />
		<xsd:attribute name="invoiceReference" type="xsd:string"
			use="required" />
		<xsd:attribute name="totalPrice" type="xsd:decimal"
			use="required" />
	</xsd:complexType>
	<xsd:element name="student" type="studentType" />
	<xsd:complexType name="studentType">
		<xsd:attribute name="firstName" type="xsd:string"
			use="required" />
		<xsd:attribute name="surname" type="xsd:string" use="required" />
	</xsd:complexType>
	<xsd:element name="company" type="companyType" />
	<xsd:complexType name="companyType">
		<xsd:sequence>
			<xsd:element name="address" />
			<xsd:element ref="contact" />
		</xsd:sequence>
		<xsd:attribute name="name" type="xsd:string" />
	</xsd:complexType>
	<xsd:element name="contact" type="contactType" />
	<xsd:complexType name="contactType">
		<xsd:attribute name="name" type="xsd:string" use="required" />
		<xsd:attribute name="telephone" type="xsd:string"
			use="required" />
		<xsd:attribute name="email" type="xsd:string" use="required" />
	</xsd:complexType>
</xsd:schema>

2:在命令行下输入命令(必须安装JDK1.5+):
意思为 利用Java 的XML绑定编译器(Compiler)去根据 test.xsd 生成Java与XML绑定的类放到包名为:com.rui.jaxb且文件夹为src 的目录下
xjc test.xsd -p com.rui.jaxb -d src


3:将 生成好的文件拷贝到eclipse中准备使用

4:XML验证器的的代码如下:
package com.rui.jaxb.validate;

import javax.xml.bind.ValidationEvent;
import javax.xml.bind.ValidationEventHandler;
import javax.xml.bind.ValidationEventLocator;

/**
 * 验证XML有效性的ValidationEventHandler
 */
public class BookingValidationEventHandler implements ValidationEventHandler {


    public boolean handleEvent(ValidationEvent event) {
        System.out.println("print message...");
        // 判断验证严重级别: 1:致命错误:FATAL_ERROR 2: 错误: ERROR 3: 警告 WARNING
        if(event.getSeverity()==ValidationEvent.FATAL_ERROR || event.getSeverity() == ValidationEvent.ERROR) {
            // 获得 locator
            ValidationEventLocator locator = event.getLocator();
            // 从验证事件中得到输出消息
            System.out.println("Invalid booking document: " + locator.getURL());
            System.out.println("Error: " + event.getMessage());
            // 输出 行号和列
            System.out.println("Error at colum: " + locator.getColumnNumber() + 
                                        ", line: " + locator.getLineNumber());
        }
        // 在这里我们只打印出 错误的消息,但是在真实的项目中,一些小的错误是允许的.所以我们一般返回true,这样程序就不会中断XML的处理过程,如果返回false,那么
        // 解析的这个过程将会中断 - 这要看你是想这个解析器是个 错误的报告者,还是错误的中断者
        return true;
    }

}

5:解组的示例代码如下:
package com.rui.jaxb.test;

import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.ValidationEvent;

import com.rui.jaxb.CourseBooking;
import com.rui.jaxb.validate.BookingValidationEventHandler;
import com.sun.corba.se.pept.transport.EventHandler;

/**
 * 使用JAXB技术-解组过程
 */
public class JaxbUnmarshalTest {
    
    public static void main(String[] args) throws Exception {
        // 以下为怎样使用JAXB技术从XML转换到JAVA类并获取值的过程
        
        // 创建上下文对象 - 这是编组,解组和验证操作的起点. - 参数指定为包含被JAXB映射的类的包名
        JAXBContext jaxbContext = JAXBContext.newInstance("com.rui.jaxb");
        // 创建解组对象
        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
        // 要想验证XML文件的有效性,必须在解码(unmarshal)之前附加一个ValidationEventHandler
        unmarshaller.setEventHandler(new BookingValidationEventHandler());
        // 从要解组的介质中(可以是文件、流、URL、DOM对象、SAXParser等,在此为XML文件)
        JAXBElement<CourseBooking> bookingElement = (JAXBElement<CourseBooking>)unmarshaller.unmarshal(new File("booking.xml"));
        // 通过getValue() 方法得到解组对象
        CourseBooking booking = bookingElement.getValue();
        // 得到对象中的值
        System.out.println(booking.getCompany().getContact().getTelephone());
        System.out.println(booking.getStudent().get(0).getFirstName());
        
        System.out.println(ValidationEvent.ERROR|ValidationEvent.FATAL_ERROR|ValidationEvent.WARNING);
        System.out.println(ValidationEvent.WARNING);
        System.out.println(ValidationEvent.ERROR);
        System.out.println(ValidationEvent.FATAL_ERROR);
    }

}

6:编组的示例代码如下:
package com.rui.jaxb.test;

import java.io.File;
import java.math.BigDecimal;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;
import javax.xml.datatype.DatatypeFactory;

import com.rui.jaxb.CompanyType;
import com.rui.jaxb.ContactType;
import com.rui.jaxb.CourseBooking;
import com.rui.jaxb.ObjectFactory;
import com.rui.jaxb.StudentType;


/**
 * 使用JAXB技术编组过程
 */
public class JaxbMarshalTest {
    
    public static void main(String[] args) throws Exception {
        // 以下为怎样使用JAXB技术从JAVA类转换到XML的过程
        
        // 创建上下文对象 - 这是编组,解组和验证操作的起点. - 参数指定为包含被JAXB映射的类的包名
        JAXBContext jaxbContext = JAXBContext.newInstance("com.rui.jaxb");
       
        // 创建CourceBooking 对象
        CourseBooking booking = new CourseBooking();
        //  对象初始化过程
        // 必须使用 DatatypeFactory 去处理一些固定的数据类型
        DatatypeFactory datatypes = DatatypeFactory.newInstance();
        booking.setCourseDate(datatypes.newXMLGregorianCalendarDate(2011, 11, 01, 0));
        
        booking.setCourseReference("Agile Software Development");
        booking.setTotalPrice(new BigDecimal(2000));
        booking.setInvoiceReference("123456");
        booking.getStudent().add(new StudentType());
        booking.getStudent().get(0).setFirstName("zhang");
        booking.getStudent().get(0).setSurname("san");
        booking.setCompany(new CompanyType());
        booking.getCompany().setName("rayoo_tech");
        booking.getCompany().setAddress("北清路68号");
        booking.getCompany().setContact(new ContactType());
        booking.getCompany().getContact().setName("calm_flow");
        booking.getCompany().getContact().setTelephone("1501000000");
        booking.getCompany().getContact().setEmail("rayoo_tech@163.com");
        
        // 初始化完毕后,使用JAXB上下文去创建Marshal对象和JAXBElement对象
        Marshaller marshaller = jaxbContext.createMarshaller();
        // 创建一个包装了你的Java类的JAXBElement对象,这个JAXBElement对象对应着你的文档的根元素
        JAXBElement<CourseBooking> bookingElement = (new ObjectFactory().createBooking(booking));
        // 设置格式化属性 Marshaller.JAXB_FORMATTED_OUTPUT
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        // 设置文件编码属性
        marshaller.setProperty(marshaller.JAXB_ENCODING, "UTF-8");
        // 使用输出流编组
        marshaller.marshal(bookingElement  , new File("booking2.xml")); //System.out);
    }
    
    /*
    // 像JAXB1.0一样去使用 ObjectFactory
    ObjectFactory objectFactory = new ObjectFactory();
    // 创建CourceBooking 对象
    CourseBooking booking = objectFactory.createCourseBooking();
    */
}

7: 类似解析:http://jibx.sourceforge.net/index.html
8:项目及文档见附件:
分享到:
评论

相关推荐

    jaxb 2.0 java architecture for xml binding

    THE Java™Architecture for XML Binding (JAXB) provides a fast and convenient way to bind between XML schemas and Java representations, making it easy for Java developers to incorporate XML data and ...

    Android支持JAXB(Java Architecture for XML Binding)

    Android支持JAXB(Java Architecture for XML Binding) JAXB(Java Architecture for XML Binding)是Java领域中的一项标准技术,能够根据XML Schema生成Java类,并将XML实例文档反向生成Java对象树。JAXB提供了将...

    深入解析:Java中JAXB(Java Architecture for XML Binding)实现机制

    JAXB,即Java Architecture for XML Binding,是Java EE的一部分,提供了一种将XML数据结构化为Java对象的机制,以及反向的绑定过程。本文将深入探讨JAXB的实现原理、使用方法和最佳实践。 JAXB为Java开发者提供了一...

    JAXBDemo:JAXB(Java Architecture for XML Binding)的演示,它允许在 XML 和 java 类之间轻松转换

    **JAXB(Java Architecture for XML Binding)** 是Java平台上的一个标准,用于处理XML文档,它提供了一种方便的方式来将XML数据映射到Java对象,同时也可以将Java对象转换为XML文档。JAXB使得XML的解析、生成以及...

    JAXB工具类 xml转为java对象 java对象转为xml

    Java Architecture for XML Binding (JAXB) 是Java平台中用于处理XML和Java对象之间转换的一个标准API。它使得在Java应用程序中使用XML数据变得更加方便,无需手动编写大量的转换代码。本教程将详细介绍JAXB如何实现...

    XML.rar_XML java_java call_java xml_xml 读写_xml读写 java

    对于XML的读写,Java提供了许多库,如JAXB(Java Architecture for XML Binding)用于对象与XML之间的映射,方便数据交换;DOM4J提供了一套完整的DOM、SAX和JDOM接口,便于XML处理;另外,Java标准库中的javax.xml....

    Java-xml.rar_XML java_java xml_javaXML.rar_javaxml.r_xml 网站

    在Java中,有多种处理XML的API,如DOM(Document Object Model)、SAX(Simple API for XML)和JAXB(Java Architecture for XML Binding)。DOM一次性加载整个XML文档到内存中,适合小型文件;SAX是事件驱动的,...

    cn.rar_java xml to bea_java commonUt_xml to be_xml to bean

    Java中实现XML到Bean的转换,主要依赖于`JAXB (Java Architecture for XML Binding)` API。JAXB允许我们将XML文档映射到Java对象,反之亦然。在描述的代码中,可能包含了一个自定义的类加载器,这是为了动态加载Java...

    JAXB完成XML和Java对象的互转

    JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例...

    XML.rar_XML SAX_XML java_dom xml_java xml_java解析xml

    除了Java自带的解析库,还有第三方库如JAXB(Java Architecture for XML Binding)用于对象与XML之间的映射,以及DOM4J、XOM等提供更高级别的接口,简化XML处理。 5. 实战应用: 在实际项目中,根据需求选择合适的...

    JAXB 利用xsd文件生成java类

    JAXB (Java Architecture for XML Binding) 是Java平台上的一个标准,用于将XML文档与Java对象之间进行绑定,实现XML数据的解析和序列化。在Java开发中,JAXB提供了一种方便的方式,允许开发者通过XML Schema (XSD) ...

    JAX-WS_Java API for XML Web Services

    5. **JAXB (Java Architecture for XML Binding)**: 用于对象和XML之间的自动转换,是JAX-WS的重要组成部分。通过JAXB,Java对象可以直接序列化为XML,反之亦然。 **JAX-WS的开发流程** 1. **定义SEI**: 开发者...

    xml_programming_in_java.rar_XML java_java programming_xml how to

    2. **JAXB(Java Architecture for XML Binding)** JAXB允许Java对象与XML之间进行自动转换,简化了数据绑定过程。通过注解或者XML Schema,可以将Java类映射到XML元素,反之亦然。 3. **JDOM(Java Document ...

    xml-apis.zip_JAVA XML_java xml_xml_zip

    3. **JAXB(Java Architecture for XML Binding)**:虽然不在"xml-apis.jar"中,但通常与Java XML处理相关。JAXB允许将XML文档与Java对象之间进行自动映射,简化了XML数据的序列化和反序列化。 4. **JAXP(Java ...

    XML Programming in Java.rar_java programming_java xml_xml

    3. **JAXB(Java Architecture for XML Binding)**:JAXB是Java标准,用于在Java对象和XML文档之间进行自动转换。通过注解或XML Schema,我们可以将Java类映射到XML元素,实现序列化和反序列化。 4. **StAX...

    Xml.rar_java xml_xml_xml 数据库_xml数据库

    在Java中,JAXB(Java Architecture for XML Binding)是用于对象到XML以及XML到对象之间转换的标准API,它可以自动将Java对象序列化为XML,并反序列化回Java对象。而JDBC(Java Database Connectivity)则是Java...

    JavaXml.zip_java xml_javaXML_java解析xml_文档解析

    在Java中处理XML的库还包括JAXB(Java Architecture for XML Binding),它可以将XML文档自动映射为Java对象,反之亦然。这在需要频繁进行XML与Java对象转换的场景下非常有用。`javax.xml.bind.JAXBContext`和`javax...

    java-xml自动生成对象实体以及与xml相互转化.zip_Java doc转xml_java xml 转 实体_java 毕

    3. **JAXB(Java Architecture for XML Binding)**:JAXB提供了一种将Java对象和XML进行自动转换的方式,使得数据交换变得简单。通过注解或者绑定文件,可以定义Java类和XML元素之间的映射关系。`javax.xml.bind....

    xml.rar_XML java_java xml_xml

    此外,JAXB(Java Architecture for XML Binding)可用于对象与XML之间的自动序列化和反序列化,简化数据交换。 最后,我们提到的`xml.txt`和`www.pudn.com.txt`可能是示例代码或XML数据文件。对于学习XML编程,...

Global site tag (gtag.js) - Google Analytics