# 基本的例子 > 原文: [https://docs.oracle.com/javase/tutorial/jaxb/intro/basic.html](https://docs.oracle.com/javase/tutorial/jaxb/intro/basic.html) 本节介绍基本 JAXB 示例(Modify Marshal,Unmarshal Validate),演示如何: * 将 XML 文档解组为 Java 内容树并访问其中包含的数据 * 修改 Java 内容树 * 使用 `ObjectFactory` 类创建 Java 内容树,然后将其封送到 XML 数据 * 在解组期间执行验证 * 在运行时验证 Java 内容树 ## 修改元帅示例 Modify Marshal 示例演示了如何修改 Java 内容树。 1. _jaxb-ri-install_ `/samples/modify-marshal/src/Main.java` 类声明导入三个标准 Java 类,五个 JAXB 绑定框架类和`引物.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. 创建 `JAXBContext` 实例用于处理 `primer.po` 中生成的类。 ``` 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` 方法用于修改内容树的`地址`分支中的信息。 ``` 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 构建和运行修改 Marshal 示例 要使用 Ant 编译并运行 Modify Marshal 示例,请在终端窗口中转到 _jaxb-ri-install_ `/ samples / modify-marshal /` 目录并键入以下内容: ``` ant ``` ## Unmarshal Validate 示例 Unmarshal Validate 示例演示了如何在解组期间启用验证。请注意,JAXB 在解组期间提供验证功能,但在编组期间不提供。验证在[更多关于验证](arch.html#bnazn)中有更详细的解释。 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. 创建 `JAXBContext` 实例用于处理 `primer.po` 包中生成的类。 ``` 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 构建和运行 Unmarshal 验证示例 要使用 Ant 编译和运行 Unmarshal Validate 示例,请在终端窗口中转到 _jaxb-ri-install_ `/ samples / unmarshal-validate /` 目录并键入以下内容: ``` ant ```