文档

Java™教程
隐藏目录
基本示例
路径: Java XML绑定架构 (JAXB)
课程: JAXB简介

基本示例

本节介绍了基本的JAXB示例(修改编组、解组和验证),演示了如何:

修改编组示例

修改编组示例演示了如何修改Java内容树。

  1. jaxb-ri-install/samples/modify-marshal/src/Main.java类声明了导入三个标准Java类、五个JAXB绑定框架类和primer.po包:
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.math.BigDecimal;
    
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBElement;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Marshaller;
    import javax.xml.bind.Unmarshaller;
    
    import primer.po.*;
    
  2. 创建一个用于处理在primer.po中生成的类的JAXBContext实例:
    	
    JAXBContext jc = JAXBContext.newInstance( "primer.po" );
    
  3. 创建一个Unmarshaller实例,并解组po.xml文件:
    Unmarshaller u = jc.createUnmarshaller();
    PurchaseOrder po = (PurchaseOrder)
        u.unmarshal(new FileInputStream("po.xml"));
    
  4. 使用set方法修改内容树中address分支中的信息:
    USAddress address = po.getBillTo();
    address.setName("John Bob");
    address.setStreet("242 Main Street");
    address.setCity("Beverly Hills");
    address.setState("CA");
    address.setZip(new BigDecimal
    address.setName("John Bob");
    address.setStreet("242 Main Street");
    address.setCity("Beverly Hills");
    address.setState("CA");
    address.setZip(new BigDecimal("90210"));
    
  5. 创建一个Marshaller实例,并将更新后的XML内容编组到system.out。使用setProperty API指定输出编码;在这种情况下,它是格式化(可读)的XML:
    Marshaller m = jc.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    m.marshal(po, System.out);
    

使用Ant构建和运行修改编组示例

要使用Ant编译和运行修改编组示例,在终端窗口中,转到jaxb-ri-install/samples/modify-marshal/目录,并键入以下内容:

ant

解组验证示例

解组验证示例演示了如何在解组过程中启用验证。请注意,JAXB提供了解组过程中的验证功能,但没有提供编组过程中的验证功能。有关验证的更多详细信息,请参见更多关于验证的信息

  1. jaxb-ri-install/samples/unmarshal-validate/src/Main.java类声明了导入一个标准的Java类、11个JAXB绑定框架类以及primer.po包:
    import java.io.File;
    
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Marshaller;
    import javax.xml.bind.UnmarshalException;
    import javax.xml.bind.Unmarshaller;
    import javax.xml.bind.ValidationEvent;
    import javax.xml.bind.ValidationEventHandler;
    import javax.xml.bind.ValidationEventLocator;
    
    import static javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI;
    import javax.xml.validation.SchemaFactory;
    import javax.xml.validation.Schema;
    
    import primer.po.*;
    
  2. 创建一个用于处理在primer.po包中生成的类的JAXBContext实例:
    JAXBContext jc = JAXBContext.newInstance("primer.po");
    
  3. 创建一个Unmarshaller实例:
    Unmarshaller u = jc.createUnmarshaller();
    
  4. 启用默认的JAXB Unmarshaller ValidationEventHandler,将验证警告和错误发送到system.out。默认配置导致在遇到第一个验证错误时解组操作失败:
    u.setValidating( true );
    
  5. 尝试将po.xml文件解组为Java内容树。对于此示例,po.xml文件包含一个故意的错误:
    PurchaseOrder po = (PurchaseOrder)u.unmarshal(
        new FileInputStream("po.xml"));
    
  6. 默认的验证事件处理程序处理验证错误,生成输出到system.out,然后抛出异常:
    } catch( UnmarshalException ue ) {
        System.out.println("Caught UnmarshalException");
    } catch( JAXBException je ) { 
        je.printStackTrace();
    } catch( IOException ioe ) {
        ioe.printStackTrace();
    }
    

使用Ant构建和运行解组验证示例

要使用Ant编译和运行解组验证示例,在终端窗口中,进入jaxb-ri-install/samples/unmarshal-validate/目录,然后输入以下命令:

ant 

上一页: JAXB示例
下一页: 自定义JAXB绑定