Basic Examples

本节描述了基本的 JAXB 示例(修改 marshal,取消 marshal 验证),它们演示了如何:

  • 将 XML 文档解组到 Java 内容树中并访问其中包含的数据

  • 修改 Java 内容树

  • 使用ObjectFactory类创建 Java 内容树,然后将其编组为 XML 数据

  • 解组期间执行验证

  • 在运行时验证 Java 内容树

修改 marshal 示例

Modify Marshal 示例演示了如何修改 Java 内容树。

  • 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.*;
  • 创建了一个JAXBContext实例来处理primer\.po中生成的类。
JAXBContext jc = JAXBContext.newInstance( "primer.po" );
  • 创建一个Unmarshaller实例,并解组po\.xml文件。
Unmarshaller u = jc.createUnmarshaller();
PurchaseOrder po = (PurchaseOrder)
    u.unmarshal(new FileInputStream("po.xml"));
  • 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"));
  • 创建一个Marshaller实例,并将更新的 XML 内容编组到system\.outsetProperty API 用于指定输出编码;在这种情况下,它是格式化的(人类可读的)XML。
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(po, System.out);

使用 Ant 构建并运行 Modify Marshal 示例

要使用 Ant 编译并运行 Modify Marshal 示例,请在终端窗口中,转到 jaxb-ri-install /samples/modify\-marshal/目录,然后键入以下内容:

ant

解组验证示例

“解组验证”示例演示了如何在解组期间启用验证。请注意,JAXB 提供了用于在编组期间进行验证的功能,但不在编组期间进行验证。验证在有关验证的更多信息中有更详细的说明。

  • jaxb-ri-install /samples/unmarshal\-validate/src/Main\.java类声明一个标准 Java 类,十一个 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.*;
  • 创建了一个JAXBContext实例来处理在primer\.po包中生成的类。
JAXBContext jc = JAXBContext.newInstance("primer.po");
  • Unmarshaller实例已创建。
Unmarshaller u = jc.createUnmarshaller();
  • 默认的 JAXB Unmarshaller ValidationEventHandler已启用,可以向system\.out发送验证警告和错误。默认配置会导致遇到第一个验证错误时解组操作失败。
u.setValidating( true );
  • 试图将po\.xml文件解组到 Java 内容树中。就本示例而言,po\.xml文件包含故意的错误。
PurchaseOrder po = (PurchaseOrder)u.unmarshal(
    new FileInputStream("po.xml"));
  • 默认的验证事件处理程序处理验证错误,将输出生成到system\.out,然后引发异常。
} catch( UnmarshalException ue ) {
    System.out.println("Caught UnmarshalException");
} catch( JAXBException je ) { 
    je.printStackTrace();
} catch( IOException ioe ) {
    ioe.printStackTrace();
}

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

要使用 Ant 编译并运行 Unmarshal Validate 示例,请在终端窗口中,转到 jaxb-ri-install /samples/unmarshal\-validate/目录并键入以下内容:

ant