jaxb xml 生成 java_使用 JAXB 工具根据 Java 类生成 XML 模式

本文档详细介绍了如何使用 JAXB 工具根据 Java 类生成 XML 模式文件,包括使用 schemagen 命令行工具的步骤、JAXB 注释的使用以及示例代码。此外,还提到了 XML 模式文件生成后如何进行编组和取消编组,以实现 Java 对象与 XML 文档之间的转换。
摘要由CSDN通过智能技术生成

使用 JAXB 工具根据 Java 类生成 XML 模式

2010-06-10 18:24:26|  分类: web service |字号 订阅

关键字: java to xml 使用 JAXB 工具根据 Java 类生成 XML 模式文件2008-10-31 20:02使用 JAXB 工具根据 Java 类生成 XML 模式文件

使用 Java XML 绑定体系结构(JAXB)工具根据 Java 类生成 XML 模式文件。

在您开始之前

标识 Java 类或一组 Java 对象以映射至 XML 模式文件。

关于本任务

使用 JAXB API 和工具在 Java 类与 XML 模式之间建立映射。XML 模式文档描述了 XML 文档中的数据元素和关系。在数据映射或绑定存在后,可以在 XML 文档与 Java 对象之间进行转换。现在不必理解数据结构即可访问 XML 文档中存储的数据。

通过使用 JAXB 模式生成器 schemagen 命令行工具,可以根据表示 Java 应用程序的数据元素的现有 Java 应用程序来创建 XML 模式文档。JAXB 模式生成器处理 Java 源文件或类文件。Java 类注释能够定制从现有 Java 类到生成模式组件的缺省映射。XML 模式文件以及带注释的 Java 类文件包含 JAXB 运行时对 XML 文档以进行编组和取消编组所需的所有必需信息。

过程

1. 找到带注释的 Java 源文件或 Java 类文件以用于生成 XML 模式文件。 确保 Java 类文件所引用的所有类均包含在类路径定义中,或者通过 -classpath/-cp 选项提供给工具。

2. 使用 JAXB 模式生成器 schemagen 命令来生成 XML 模式。 模式生成器位于 app_server_root\bin\ 目录中。

[Windows]

app_server_root\bin\schemagen.bat myObj1.java myObj2.java

[Linux] [AIX] [HP-UX] [Solaris]

app_server_root/bin/schemagen.sh myObj1.java myObj2.java

其中,参数 myObj1.java 和 myObj2.java 是包含数据对象的 Java 文件的名称。

如果 myObj1.java 或 myObj2.java 引用未传递至 schemagen 命令的 Java 类,那么必须使用 -cp 选项来提供这些 Java 类的类路径位置。

3. (可选)使用在 javax.xml.bind.annotations 包中定义的 JAXB 程序注释来定制 JAXB XML 模式映射。

结果

在根据 Java 类生成 XML 模式文件后,那么可以将 Java 对象作为 XML 实例文档进行编组和取消编组。

避免故障: 当多个 XMLType 注释在不同 Java 包中定义了同一个 @XMLType 名称时,schemagen 命令无法在这些注释之间区分 XML 名称空间。如果出现了这种情况,那么将产生以下错误:

Error: Two classes have the same XML type name ....

Use @XmlType.name and @XmlType.namespace to assign different names to them...

此错误指示您具有同名的类或 @XMLType.name 值,但它们存在于不同的 Java 包中。要防止此错误,请将 @XML.Type.namespace 类添加至现有的 @XMLType 注释以区分 XML 类型。gotcha

示例

以下示例说明 JAXB 工具如何根据现有 Java 类 Bookdata.java 生成 XML 模式文件。

1. 将以下 Bookdata.java 文件复制到临时目录。

package generated;

import javax.xml.bind.annotation.XmlAccessType;

import javax.xml.bind.annotation.XmlAccessorType;

import javax.xml.bind.annotation.XmlAttribute;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlType;

import javax.xml.datatype.XMLGregorianCalendar;

@XmlAccessorType(XmlAccessType.FIELD)

@XmlType(name = "bookdata", propOrder = {

"author",

"title",

"genre",

"price",

"publishDate",

"description"

})

public class Bookdata {

@XmlElement(required = true)

protected String author;

@XmlElement(required = true)

protected String title;

@XmlElement(required = true)

protected String genre;

protected float price;

@XmlElement(name = "publish_date", required = true)

protected XMLGregorianCalendar publishDate;

@XmlElement(required = true)

protected String description;

@XmlAttribute

protected String id;

public String getAuthor() {

return author;

}

public void setAuthor(String value) {

this.author = value;

}

public String getTitle() {

return title;

}

public void setTitle(String value) {

this.title = value;

}

public String getGenre() {

return genre;

}

public void setGenre(String value) {

this.genre = value;

}

public float getPrice() {

return price;

}

public void setPrice(float value) {

this.price = value;

}

public XMLGregorianCalendar getPublishDate() {

return publishDate;

}

public void setPublishDate(XMLGregorianCalendar value) {

this.publishDate = value;

}

public String getDescription() {

return description;

}

public void setDescription(String value) {

this.description = value;

}

public String getId() {

return id;

}

public void setId(String value) {

this.id = value;

}

}

2. 打开命令提示符。

3. 从复制 Bookdata.java 文件的目录中运行 schemagen 模式生成器工具。

[Windows]

app_server_root\bin\schemagen.bat Bookdata.java

[Linux] [AIX] [HP-UX] [Solaris]

app_server_root/bin/schemagen.sh Bookdata.java

4. 将生成 XML 模式文件 schema1.xsd:

请参阅 JAXB 2.0 参考实施文档,以了解 schemagen 命令的更多信息

================================================================

将 JAXB 用于 XML 数据绑定

Java XML 绑定体系结构(JAXB)是一种 Java 技术,提供一种简单便捷的方法来映射 Java 类和 XML 模式,从而简化 Web Service 开发。JAXB 提供模式编译器、模式生成器和运行时框架来支持 Java 对象与 XML 文档之间的双向映射。

关于本任务

JAXB 是一种 XML 至 Java 绑定技术,允许在模式与 Java 对象之间进行变换以及在 XML 实例文档与 Java 对象实例之间进行变换。JAXB 技术包含运行时 API 并随附可简化对 XML 文档的访问权的工具。可以使用 JAXB API 和工具在 Java 类与 XML 模式之间建立映射。XML 模式定义 XML 文档的数据元素和结构。JAXB 技术提供相应的工具,使您能够在 XML 文档与 Java 对象之间进行转换。不必理解 XML 数据结构即可访问存储在 XML 文档中的数据。

JAXB 是缺省数据绑定技术,供本产品中的“针对 XML Web Service 的 Java API”(JAX-WS)2.0 工具和实现使用。可以开发 JAXB 对象以便在 JAX-WS 应用程序中使用。也可以独立于 JAX-WS 编程模型使用 JAXB 作为便捷的方法来利用 XML 数据绑定技术,以便在 Java 应用程序中控制 XML。

JAXB 提供 xjc 模式编译器工具、schemagen 模式生成器工具以及运行时框架。xjc 模式编译器工具使您能够从 XML 模式定义(XSD)着手,创建一组 JavaBeans 以映射至 XSD 模式中定义的元素和类型。也可以从一组 JavaBeans 着手,使用 schemagen 模式生成器工具来创建 XML 模式。在使用模式编译器或模式生成器工具后,可以在 XML 文档与 Java 对象之间进行转换,并使用生成的 Java 类来组装 Web Service 应用程序。

JAXB 注释类和工件包含 JAXB 运行时 API 用于处理 XML 实例文档所需的所有信息。JAXB 运行时 API 支持将 JAXB 对象编组为 XML 文件及取消对 XML 文档的编组以使其恢复为 JAXB 类实例。JAXB 绑定包 javax.xml.bind 定义与内容类直接配合使用的抽象类和接口。此外,此包还定义 marshal 和 unmarshal API。

在缺省绑定未满足业务应用程序需求时,可根据情况使用 JAXB 绑定定制内容以通过覆盖或扩展缺省 JAXB 绑定来定制生成的 JAXB 类。在大多数情况下,缺省绑定规则足以生成一组可靠的模式派生类。JAXB 支持将定制和覆盖绑定至缺省绑定规则,这可以通过各种方法来实现。例如,可以将覆盖内联为源模式中的注释、内联为由 JAXB 绑定编译器使用的外部绑定定制文件中的声明,或者内联为由 JAXB 模式生成器使用的 Java 类文件中的 Java 注释。请参阅 JAXB 规范以了解有关绑定定制选项的信息。

借助 JAXB,可以使用下列方法控制数据对象:

过程

* 根据 Java 类生成 XML 模式。 使用模式生成器 schemagen 命令根据 Java 类生成 XML 模式。

* 根据 XML 模式生成 Java 类。 使用模式编译器 xjc 命令根据 XML 模式来创建一组使用 JAXB 注释的 Java 类。

* 对 XML 文档进行编组和取消编组。 在 XML 模式与 Java 类之间存在映射后,请使用 JAXB 绑定运行时将 XML 实例文档转换为 Java 对象及将 Java 对象转换为 XML 实例文档。

结果

您现在具有 Java 应用程序可用于控制 XML 数据的 JAXB 对象。

===========================================================================================

使用 JAXB 工具根据 XML 模式文件生成 JAXB 类

使用 Java XML 绑定体系结构(JAXB)工具将 XML 模式文件编译为完全注释的 Java 类。

在您开始之前

开发或获取 XML 模式文件。

关于本任务

可以使用 JAXB API 和工具在 Java 类与 XML 模式之间建立映射。XML 模式描述 XML 文档中的数据元素和关系。在数据映射或绑定存在后,可以在 XML 文档与 Java 对象之间进行转换。现在不必理解数据结构即可访问 XML 文档中存储的数据。

通过使用 JAXB 模式编译器 xjc 命令行工具根据 XML 模式文件生成完全注释的 Java 类。生成的带注释 Java 类包含 JAXB 运行时解析 XML 以进行编组和取消编组所需的所有必需信息。可以在“针对 XML Web Service 的 Java API”(JAX-WS)应用程序或非 JAX-WS Java 应用程序中使用生成的 JAXB 类来处理 XML 数据。

过程

1. 使用 JAXB 模式编译器 xjc 命令来生成 JAXB 注释 Java 类。 模式编译器位于 app_server_root\bin\ 目录中。模式编译器根据编译时使用的绑定选项生成一组包含 Java 源文件和 JAXB 属性文件的包。

2. (可选)使用定制绑定声明来更改缺省 JAXB 映射。 在 XML 模式文件或单独绑定文件中定义绑定声明。可通过将 -b 选项与 xjc 命令配合使用来传递定制绑定文件。

3. 编译生成的 JAXB 对象。 要编译生成的工件,请将 Thin Client for JAX-WS with WebSphere Application Server 添加至类路径。

结果

在生成 JAXB 对象后,可以使用生成的 JAXB 对象编写 Java 应用程序并通过生成的 JAXB 类来控制 XML 内容。

示例

以下示例说明从现有 XML 模式文件着手时 JAXB 工具如何生成 Java 类。

1. 将以下 bookSchema.xsd 模式文件复制到临时目录。

maxOccurs="unbounded"/>

2. 打开命令提示符。

3. 从模式文件所在的目录中运行 JAXB 模式编译器 xjc 命令。xjc 模式编译器工具位于 app_server_root\bin\ 目录中。

[Windows]

app_server_root\bin\xjc.bat bookSchema.xsd

[Linux] [AIX] [HP-UX] [Solaris]

app_server_root/bin/xjc.sh bookSchema.xsd

运行 xjc 命令将生成下列 JAXB Java 文件:

generated\Bookdata.java

generated\CatalogdData.java

generated\ObjectFactory.java

4. 在 Java 应用程序中使用生成的 JAXB 对象通过生成的 JAXB 类来控制 XML 内容。

请参阅 JAXB 2.0 参考实施文档,以了解 xjc 命令的更多信息。

=========================================================

使用 JAXB 运行时对 XML 文档进行编组和取消编组

使用 Java XML 绑定体系结构(JAXB)运行时来控制 XML 实例文档。

在您开始之前

使用 JAXB 通过模式编译器 xjc 命令根据 XML 模式生成 Java 类,也可以通过模式生成器 schemagen 命令根据 Java 类生成 XML 模式。

关于本任务

可以使用 JAXB API 和工具在 Java 类与 XML 模式之间建立映射。在数据绑定存在后,请使用 JAXB 绑定运行时 API 在 XML 实例文档与 Java 对象之间进行转换。不必理解数据结构即可访问存储在 XML 文档中的数据。JAXB 注释类和工件包含 JAXB 运行时 API 用于处理 XML 实例文档所需的所有信息。JAXB 运行时 API 支持将 JAXB 对象编组为 XML 及取消对 XML 文档的编组以使其恢复为 JAXB 类实例。

过程

* 将 JAXB 对象编组为 XML 实例文档。

使用 JAXB 运行时 API 将 JAXB 对象实例编组或转换为 XML 实例文档。

1. 对 JAXB 类进行实例化。

2. 调用 JAXB 编组器。

本示例演示如何在应用程序中对生成的 JAXB 对象进行实例化,以及如何使用 JAXBContext 类和 JAXB 运行时编组器 API 将 JAXB 对象编组为 XML 实例。

JAXBContext jc = JAXBContext.newInstance("myPackageName");

//Create marshaller

Marshaller m = jc.createMarshaller();

//Marshal object into file.

m.marshal(myJAXBObject, myOutputStream);

JAXB 参考实现引入了其他特定于供应商的编组器属性,例如,名称空间前缀映射、缩进以及字符转义控制,这些属性不是由 JAXB 规范定义。使用这些属性来指定编组过程的其他控制。这些属性仅与 JAXB 参考实现配合使用,无法与其他 JAXB 提供程序配合使用。可在 Java XML 绑定体系结构 JAXB RI Vendor Extensions Runtime Properties 规范中找到有关特定于供应商的属性的更多信息。

* 将 XML 文件取消编组为 JAXB 对象。

使用 JAXB 运行时 API 将 XML 实例文档取消编组或转换为 JAXB 对象实例。

1. 获取现有 XML 实例文档。

2. 调用 JAXB 取消编组器。

本示例演示了读取 XML 文档及将 XML 文档取消编组或转换为 JAXB 对象实例的程序。使用 JAXBContext 类和 JAXB 运行时取消编组器 API 对 XML 文档进行取消编组。

JAXBContext jc = JAXBContext.newInstance("myPackageName");

//Create unmarshaller

Unmarshaller um = jc.createUnmarshaller();

//Unmarshal XML contents of the file myDoc.xml into your Java

object instance.

MyJAXBObject myJAXBObject = (MyJAXBObject)

um.unmarshal(new java.io.FileInputStream( "myDoc.xml" ));

结果

您现在可以使用 JAXB 绑定框架对 JAXB Java 类进行编组及对 XML 数据进行取消编组。请参阅 JAXB 2.0 参考实施文档,以了解有关编组和取消编组运行时 API 的更多信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用 JAXB 生成 Java 实体需要按照以下步骤进行: 1. 在 pom.xml 中添加 JAXB 的依赖。 ``` <dependencies> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> </dependencies> ``` 2. 创建一个包含 JAXB 注解的 Java 。 ``` import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Person { private String name; private int age; // 省略 getter 和 setter 方法 } ``` 3. 使用 JAXBXML 数据映射到 Java 实体。 ``` import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; // 读取 XML 文件 File file = new File("person.xml"); // 创建 JAXBContext 对象 JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); // 创建 Unmarshaller 对象 Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); // 将 XML 数据转换为 Java 对象 Person person = (Person) unmarshaller.unmarshal(file); // 输出结果 System.out.println(person.getName()); System.out.println(person.getAge()); ``` 4. 使用 JAXBJava 实体转换为 XML 数据。 ``` import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; // 创建 Person 对象 Person person = new Person(); person.setName("张三"); person.setAge(20); // 创建 JAXBContext 对象 JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); // 创建 Marshaller 对象 Marshaller marshaller = jaxbContext.createMarshaller(); // 将 Java 对象转换为 XML 数据 marshaller.marshal(person, new File("person.xml ### 回答2: Java中,JAXBJava Architecture for XML Binding)是一种用于将XML数据与Java对象进行绑定的技术。JAXB可以根据给定的XML数据自动生成Java实体的内容。 在使用JAXB时,我们需要先编写一个XSD(XML Schema Definition)文件,XSD文件定义了XML数据的结构和规则。然后,我们可以使用JAXB提供的工具将XSD文件转换为Java。 首先,我们需要导入JAXB相关的包,例如javax.xml.bind.annotation和javax.xml.bind.annotation.adapters等。 然后,我们可以使用JAXB提供的注解来进行定义。比如,使用@XmlRootElement注解来指定根元素,使用@XmlElement注解来指定元素,使用@XmlAttribute注解来指定属性等。 接下来,我们可以使用JAXB提供的工具生成Java。可以通过命令行的方式执行xjc命令,将XSD文件转换为Java,也可以通过IDE工具中的插件或者菜单来完成这个过程。 生成Java将包含与XML数据对应的字段和方法。我们可以通过调用相关的getter和setter方法来访问和修改这些字段的值。 此外,JAXB还提供了一些其他的功能,例如将Java对象序列化成XML数据、将XML数据反序列化为Java对象等。 总之,使用JAXB可以根据给定的XML数据自动生成相应的Java实体内容,使得XML数据与Java对象之间的转换更加方便和简洁。 ### 回答3: Java使用JAXB可以根据XML数据自动生成实体内容。JAXBJava架构用于处理JavaXML之间的数据绑定和序列化的技术。使用JAXB可以根据XML的结构自动生成相应的Java,从而方便地在程序中使用XML数据。 在使用JAXB时,首先需要定义一个XML模式文档(XML Schema),该文档描述了XML数据的结构和约束。然后,使用JAXB提供的工具生成Java。通过运行JAXB命令行工具或者使用maven插件,可以将XML模式文档转换为Java生成Java会根据XML的结构生成对应的属性(与XML元素对应),并提供相应的访问方法。同时,JAXB还可以根据XML中的属性生成对应的Java注解,进一步增强生成Java的功能。 使用JAXB生成的实体可以方便地进行XMLJava对象之间的互相转换,通过调用JAXB提供的方法,可以将XML数据转换为Java对象,或将Java对象转换为XML数据。在转换过程中,JAXB会自动完成对象属性与XML元素或属性之间的映射,无需开发人员手动解析XML数据。 总之,JAXB是一个强大的工具,可以根据XML数据自动生成实体内容,简化了JavaXML之间的数据绑定和序列化任务。使用JAXB可以减少在处理XML数据时的开发工作量,提高代码的可读性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值