如何根据xml和schema文件java 生成一个xml文件java类

Java与XML的故事一:通过XSD生成Java类
JAXB让Java与XML之间繁琐的机械编码成为过去,现在可以简单的通过XSD文件生成对应的Java文件,我一般使用maven-jaxb2-plugin来实现xsd到java文件的生成。
指定xsd文件路径,制定binding文件路径,指定生成java文件路径 &lt
23:21&&&[]
想问一下,我手上有个&XSD&文件,我想通过这个&XSD&文件,生成一个&Jar&包或者&一些*.class文件,然后用过这个&这个Jar或者&class&来生成一个&XML
-16:00&&&[]
;a.xsd单独生成时,会生成多个objectfactory,后者内部重复定义了前者的Q_NAME,
有什么好办法使a.xsd生成的objectfactory继承或者使用bas.xsd生成的objectfactory吗?
请各位大牛指点……不胜感激
回复讨论(解决方案)
自己up一下
-15:06&&&[]
文件。(这个命令意味着当前目录就是xsd.exe和待转换的xml文件在的目录) 得到xsd文件以后,在cmd里输入:xjc -d . -p packageName ./fileName.xsd 就可以生成对应的Java类。
10:24&&&[]
现在手里有一个XML文件,需要根据这个XML文件的结构来定义Java类和数据库结构。
因为XML太过复杂,如果手动copy写Java的话很麻烦。
请问各位高手有没有什么工具或者方法可以实现这个功能。
比如有个XML
20:51&&&[]
;XML&的话,那我拥有一个接口就可以自动生成一个实现了!
如果&XSD&能生成一个&XML&的话,那我拥有一个接口就可以自动生成一个实现了!
.net有个方法实现根据XSD的规则来生成XML啊,java中要怎么实现呢?
哎,一声叹息啊!
-18:05&&&[]
有个xml的模式文件,模式文件(xsd)引用了多个定义文件(xsd),现在需要根据模式文件,生成个完整的xml文件(包含多个定义文件定义的元素)&有哪位高手知道有什么免费的工具或者开源api&&希望求帮助!(要求是免费的)
回复讨论(解决方案)
-09:01&&&[]
注意:ctr生成的schema中的类型是anyType
之后同样在命令行下,执行:xjc&schema1.xsd,反向生成java类
// //&This&file&was&generated&by&nbsp
-19:06&&&[]
如标题所示
如使用castor和xml的绑定,首先根据xsd文件生成javabean,然后就可以方便的使用javabean中的marshal和unmarshal&实现javabean和xml的互转。
但使用过程中,发现了这样一个问题,如果不同的PATH下&&,出现
-15:56&&&[]
XML文件和Java对象转换是一件非常简单的事情,有了annotation的java文件和XML schema XSD文件,可以简单的通过JAXB API来实现XML与Java Object转换 marshaller Java to XML Exception is not display
23:21&&&[]
疑问是:DTD文件有了,但不知道在java程序里如何根据其约束并生成相应的xml.
先谢谢各位了
回复讨论(解决方案)
额。&DTD不是XML的约束文件么,既然这样,DTD反向生成XML,你的意识是由骨头架子变成一个人,肉从哪来。。个人想法。。静待高手
木有人给个解答或者思路
-18:41&&&[]
利用Vistual Studio自带的xsd.exe工具,根据XML自动生成XSD 1, 命令提示符--》找到vs自带的xsd.exe工具所在的文件夹
例如: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
注意:win7操作系统
13:52&&&[]Java与XML的故事一:通过XSD生成Java类
JAXB让与XML之间繁琐的机械编码成为过去,现在可以简单的通过XSD文件生成对应的Java文件,我一般使用maven-jaxb2-plugin来实现xsd到java文件的生成。
指定xsd文件路径,制定binding文件路径,指定生成java文件路径
org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
schema1-generate
src/main/resources/dir1
${project.build.directory}/generated-sources/xjc1
${project.build.directory}/generated-sources/xjc1/META-INF/1.episode
src/main/resources/dir1
binding.xjb配置
实现类型匹配,包匹配,如果类型匹配复杂,可能需要实现自己的转换类
Note1: 新版本的plugin不止可以生成java class,还可以帮忙生成object的最重要的几个方法:toString, equals, hashCode, clone,只要在configuration里配置对于的plugin就可以了
-XtoString
-XhashCode
-Xcopyable
org.jvnet.jaxb2_commons
jaxb2-basics
Note2: 我遇到过同一个项目中2个xsd文件有同样的node type,不同的内容,虽然指定了不同包来generate source还是报错,最后的解决方案是用2个execution分别解析不同的xsd文件,不过我使用cxf插件就没有遇到这个问题,可以在一个execution里面生成想要的所有Java class。19879人阅读
& & 最近在项目中一直出现Java对象和XML之间的相互转换,一开始由于项目很庞大,我又是临时调度过去,导致在按照项目组长的要求进行写代码的同时,总是在这块云里雾里,最近才慢慢开始搞清楚项目中具体的使用缘由。但是项目中封装的代码总是很庞大,因为要考虑太多的东西,而对于此,我只能通过小的Demo来说明,其实在项目中用到很多插件,轻巧,灵便,封装很好使用,但这里我讲解的是JAXB(Java Architecture
for XML Binding)。
& &&JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
& &JDK中JAXB相关的重要Class和Interface:(来源于百度百科JAXB)
JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。Marshaller接口,将Java对象序列化为XML数据。Unmarshaller接口,将XML数据反序列化为Java对象。
& &JDK中JAXB相关的重要Annotation:(来源于百度百科JAXB)
@XmlType,将Java类或枚举类型映射到XML模式类型@XmlAccessorType(XmlAccessType.FIELD) ,控制字段或属性的序列化。FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。其他值还有XmlAccessType.PROPERTY和XmlAccessType.NONE。@XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。@XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。@XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。@XmlRootElement,将Java类或枚举类型映射到XML元素。@XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素。@XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。
& & 在以上的注解中,用的最多的是@XMLType,@XmlAccessorType,@XmlRootElement。
& & 使用JAXB的缘由:
& & 1,在项目中,有时候会有很多的XML文件,但如果可以将这些文件通过对象的方式去操作,就会减少很多操作问题,而且更加符合程序员的编码方式,
& & 2,在项目中,有时候会遇到一个页面中存在很多的实体类中的数据,而且有时候有些数据不是必需的,就是说可以通过DTO来编写这些实体类,但有时候需要将这些DTO进行预先存储,不是存储到数据库中,这样就有两种思路,可以存储在内存中,也可以存储在硬盘上,此时就可以通过将Java对象转换成XML文件存储,或者变成String类型进行存储在内存中。
& & 3,给出一个场景,比如说,一个页面中有很多个模块构成,但是这些模块都是属于一个整体的模块,当用户有操作其中几个模块的时候,但操作后的数据不是最终的数据,那这个时候首先要保存当前页面中的数据(Done),然后到其他页面进行其他操作后再转到这个页面,那么之前那个页面中的数据应该还会存在,用户可以方便查看。但是由于模块较多,如果之前就存到数据库中就会造成浪费,因为其不是最终的保存效果,而当用户想进行保存(Save),此时才进行将最终的数据保存到数据库中。在这个过程中就会用到大量的临时数据,而解决这个问题很好的方法就是可以用XML保存页面中当前的数据。
& & 在本文中,首先我给出一个对象与XML的相互转换,然后,在通过模块的概念阐述要点三种的场景,当然,代码不难,很简单的模拟,对于项目中的概念会比这复杂很多,也会有专门复杂这个过程的代码编写。所以,我仅仅是抛砖引玉,能够让读者尽量有这种思想,到时候写项目的时候如果有遇到此种情况,就可以很好的进行思想迁移。
& & &说这么多,就来看看到底如何进行Java对象和XML之间的相互转换吧。
& & &首先看看Java项目的结构图:
& & & & & & & & 图1
首先给出User.java这个类
package com.
import java.io.S
import java.util.D
import javax.xml.bind.annotation.XmlAccessT
import javax.xml.bind.annotation.XmlAccessorT
import javax.xml.bind.annotation.XmlRootE
import javax.xml.bind.annotation.XmlT
* @author Steven
@XmlAccessorType(XmlAccessType.FIELD)
// XML文件中的根标识
@XmlRootElement(name = &User&)
// 控制JAXB 绑定类中属性和字段的排序
@XmlType(propOrder = {
&userName&,
&password&,
&birthday&,
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private int userId;
private String userN
// 用户密码
// 用户生日
// 用户钱包
public User() {
public User(int userId, String userName, String password, Date birthday,
double money) {
this.userId = userId;
this.userName = userN
this.password =
this.birthday =
this.money =
public int getUserId() {
return userId;
public void setUserId(int userId) {
this.userId = userId;
public String getUserName() {
return userN
public void setUserName(String userName) {
this.userName = userN
public String getPassword() {
public void setPassword(String password) {
this.password =
public Date getBirthday() {
public void setBirthday(Date birthday) {
this.birthday =
public double getMoney() {
public void setMoney(double money) {
this.money =
public String toString() {
return &User [birthday=& + birthday + &, money=& + money
+ &, password=& + password + &, userId=& + userId
+ &, userName=& + userName + &]&;
& & 此时给出最重要的进行Java对象和XML文件相互操作的核心代码XMLUtil.java,其中有着两种方式进行转换,一种是转换成对象和string类型的xml转换,一种是对象和xml文件进行转换。
XMLUtil.java
package com.
import java.io.FileNotFoundE
import java.io.FileR
import java.io.FileW
import java.io.IOE
import java.io.StringR
import java.io.StringW
import javax.xml.bind.JAXBC
import javax.xml.bind.JAXBE
import javax.xml.bind.M
import javax.xml.bind.U
* 封装了XML转换成object,object转换成XML的代码
* @author Steven
public class XMLUtil {
* 将对象直接转换成String类型的 XML输出
* @param obj
public static String convertToXml(Object obj) {
// 创建输出流
StringWriter sw = new StringWriter();
// 利用jdk中自带的转换类实现
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
// 格式化xml输出的格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
// 将对象转换成输出流形式的xml
marshaller.marshal(obj, sw);
} catch (JAXBException e) {
e.printStackTrace();
return sw.toString();
* 将对象根据路径转换成xml文件
* @param obj
* @param path
public static void convertToXml(Object obj, String path) {
// 利用jdk中自带的转换类实现
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
// 格式化xml输出的格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
// 将对象转换成输出流形式的xml
// 创建输出流
FileWriter fw =
fw = new FileWriter(path);
} catch (IOException e) {
e.printStackTrace();
marshaller.marshal(obj, fw);
} catch (JAXBException e) {
e.printStackTrace();
@SuppressWarnings(&unchecked&)
* 将String类型的xml转换成对象
public static Object convertXmlStrToObject(Class clazz, String xmlStr) {
Object xmlObject =
JAXBContext context = JAXBContext.newInstance(clazz);
// 进行将Xml转成对象的核心接口
Unmarshaller unmarshaller = context.createUnmarshaller();
StringReader sr = new StringReader(xmlStr);
xmlObject = unmarshaller.unmarshal(sr);
} catch (JAXBException e) {
e.printStackTrace();
return xmlO
@SuppressWarnings(&unchecked&)
* 将file类型的xml转换成对象
public static Object convertXmlFileToObject(Class clazz, String xmlPath) {
Object xmlObject =
JAXBContext context = JAXBContext.newInstance(clazz);
Unmarshaller unmarshaller = context.createUnmarshaller();
FileReader fr =
fr = new FileReader(xmlPath);
} catch (FileNotFoundException e) {
e.printStackTrace();
xmlObject = unmarshaller.unmarshal(fr);
} catch (JAXBException e) {
e.printStackTrace();
return xmlO
下面给出测试类Test.java
package com.
import java.util.D
* @author Steven
public class Test {
public static void main(String[] args) {
// 创建需要转换的对象
User user = new User(1, &Steven&, &@sun123&, new Date(), 1000.0);
System.out.println(&---将对象转换成string类型的xml Start---&);
// 将对象转换成string类型的xml
String str = XMLUtil.convertToXml(user);
System.out.println(str);
System.out.println(&---将对象转换成string类型的xml End---&);
System.out.println();
System.out.println(&---将String类型的xml转换成对象 Start---&);
User userTest = (User) XMLUtil.convertXmlStrToObject(User.class, str);
System.out.println(userTest);
System.out.println(&---将String类型的xml转换成对象 End---&);
运行的结果如图2所示:
& & & & & & & & & & & & &图2
第二种方式的测试类如下所示;
package com.
import java.util.D
* @author Steven
public class Test {
public static void main(String[] args) {
// 创建需要转换的对象
User user = new User(1, &Steven&, &@sun123&, new Date(), 1000.0);
String path = &D:\\user.xml&;
System.out.println(&---将对象转换成File类型的xml Start---&);
XMLUtil.convertToXml(user, path);
System.out.println(&---将对象转换成File类型的xml End---&);
System.out.println();
System.out.println(&---将File类型的xml转换成对象 Start---&);
User user2 = (User) XMLUtil.convertXmlFileToObject(User.class, path);
System.out.println(user2);
System.out.println(&---将File类型的xml转换成对象 End---&);
此时在D:\产生的文件如图3所示:
控制台信息如图4所示:
& & & & & & & & & & & & &图4
此时打开user.xml,内容如下所示:
&?xml version=&1.0& encoding=&UTF-8& standalone=&yes&?&
&userId&1&/userId&
&userName&Steven&/userName&
&password&@sun123&/password&
&birthday&T18:24:03.477+08:00&/birthday&
&money&1000.0&/money&
& & 此时就是一个对象和XML间的相互转换过程,但是对于实际中会有很多的情况,在User中存在一个子模块Computer,这时候就需要将Computer作为User的一个属性,此时的代码如下所示:
Computer.java
package com.
import java.io.S
import java.util.D
import javax.xml.bind.annotation.XmlAccessT
import javax.xml.bind.annotation.XmlAccessorT
import javax.xml.bind.annotation.XmlRootE
import javax.xml.bind.annotation.XmlT
* @author Steven
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = &Computer&)
@XmlType(propOrder = { &serialNumber&, &brandName&, &productDate&, &price& })
public class Computer implements Serializable {
private static final long serialVersionUID = 1L;
private String serialN
private String brandN
// 生成日期
private Date productD
public Computer() {
public Computer(String serialNumber, String brandName, Date productDate,
double price) {
this.serialNumber = serialN
this.brandName = brandN
this.productDate = productD
this.price =
public String getSerialNumber() {
return serialN
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialN
public String getBrandName() {
return brandN
public void setBrandName(String brandName) {
this.brandName = brandN
public Date getProductDate() {
return productD
public void setProductDate(Date productDate) {
this.productDate = productD
public double getPrice() {
public void setPrice(double price) {
this.price =
此时的User.java内容如下:
package com.
import java.io.S
import java.util.D
import java.util.L
import javax.xml.bind.annotation.XmlAccessT
import javax.xml.bind.annotation.XmlAccessorT
import javax.xml.bind.annotation.XmlRootE
import javax.xml.bind.annotation.XmlT
* @author Steven
@XmlAccessorType(XmlAccessType.FIELD)
// XML文件中的根标识
@XmlRootElement(name = &User&)
// 控制JAXB 绑定类中属性和字段的排序
@XmlType(propOrder = {
&userName&,
&password&,
&birthday&,
&computers&
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private int userId;
private String userN
// 用户密码
// 用户生日
// 用户钱包
// 拥有的电脑
private List&Computer&
public User() {
public User(int userId, String userName, String password, Date birthday,
double money) {
this.userId = userId;
this.userName = userN
this.password =
this.birthday =
this.money =
public int getUserId() {
return userId;
public void setUserId(int userId) {
this.userId = userId;
public String getUserName() {
return userN
public void setUserName(String userName) {
this.userName = userN
public String getPassword() {
public void setPassword(String password) {
this.password =
public Date getBirthday() {
public void setBirthday(Date birthday) {
this.birthday =
public double getMoney() {
public void setMoney(double money) {
this.money =
public void setComputers(List&Computer& computers) {
public List&Computer& getComputers() {
public String toString() {
return &User [birthday=& + birthday + &, computers=& + computers
+ &, money=& + money + &, password=& + password + &, userId=&
+ userId + &, userName=& + userName + &]&;
此时测试类为
package com.
import java.util.ArrayL
import java.util.D
import java.util.L
* @author Steven
public class Test {
public static void main(String[] args) {
User user = new User(1, &Steven&, &@sun123&, new Date(), 1000.0);
List&Computer& list = new ArrayList&Computer&();
list.add(new Computer(&xxxMMeedd&, &asus&, new Date(), 4455.5));
list.add(new Computer(&lenvoXx&, &lenvo&, new Date(), 4999));
user.setComputers(list);
String path = &D:\\user.xml&;
System.out.println(&---将对象转换成File类型的xml Start---&);
XMLUtil.convertToXml(user, path);
System.out.println(&---将对象转换成File类型的xml End---&);
System.out.println();
System.out.println(&---将File类型的xml转换成对象 Start---&);
User user2 = (User) XMLUtil.convertXmlFileToObject(User.class, path);
System.out.println(user2);
System.out.println(&---将File类型的xml转换成对象 End---&);
在这里仅仅测试File类型的转换,其结果如下所示:
产生的user.xml文件:
&?xml version=&1.0& encoding=&UTF-8& standalone=&yes&?&
&userId&1&/userId&
&userName&Steven&/userName&
&password&@sun123&/password&
&birthday&T18:36:08.508+08:00&/birthday&
&money&1000.0&/money&
&computers&
&serialNumber&xxxMMeedd&/serialNumber&
&brandName&asus&/brandName&
&productDate&T18:36:08.508+08:00&/productDate&
&price&4455.5&/price&
&/computers&
&computers&
&serialNumber&lenvoXx&/serialNumber&
&brandName&lenvo&/brandName&
&productDate&T18:36:08.508+08:00&/productDate&
&price&4999.0&/price&
&/computers&
控制台输出信息如图5所示为:
& & & & & & & & & & & & &图5
& & 这里就可以看出一个模块中有着另外一个模块,在项目中可以通过此种思想不断延伸,可以进行很多数据的暂存,可以起到缓存的目的。代码写完一遍,大家应该有着自己的思路,这样的话,在项目中可以根据具体的情况具体的分析了。
& & 在此恭祝大家学习愉快。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:80318次
积分:1127
积分:1127
排名:千里之外
原创:23篇
评论:30条
(1)(1)(2)(2)(2)(4)(12)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'博客分类:
使用 JAXB 工具根据 Java 类生成 XML 模式文件 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 文件复制到临时目录。
&&&&& import javax.xml.bind.annotation.XmlAccessT
&&&&& import javax.xml.bind.annotation.XmlAccessorT
&&&&& import javax.xml.bind.annotation.XmlA
&&&&& import javax.xml.bind.annotation.XmlE
&&&&& import javax.xml.bind.annotation.XmlT
&&&&& import javax.xml.datatype.XMLGregorianC
&&&&& @XmlAccessorType(XmlAccessType.FIELD)
&&&&& @XmlType(name = "bookdata", propOrder = {
&&&&&&&&& "author",
&&&&&&&&& "title",
&&&&&&&&& "genre",
&&&&&&&&& "price",
&&&&&&&&& "publishDate",
&&&&&&&&& "description"
&&&&& })
&&&&& public class Bookdata {
&&&&&&&&& @XmlElement(required = true)
&&&&&&&&& protected S
&&&&&&&&& @XmlElement(required = true)
&&&&&&&&& protected S
&&&&&&&&& @XmlElement(required = true)
&&&&&&&&& protected S
&&&&&&&&& p
&&&&&&&&& @XmlElement(name = "publish_date", required = true)
&&&&&&&&& protected XMLGregorianCalendar publishD
&&&&&&&&& @XmlElement(required = true)
&&&&&&&&& protected S
&&&&&&&&& @XmlAttribute
&&&&&&&&& protected S
&&&&&&&&&& public String getAuthor() {
&&&&&&&&&&&&&
&&&&&&&&& }
&&&&&&&&& public void setAuthor(String value) {
&&&&&&&&&&&&& this.author =
&&&&&&&&& }
&&&&&&&&& public String getTitle() {
&&&&&&&&&&&&&
&&&&&&&&& }
&&&&&&&&&& public void setTitle(String value) {
&&&&&&&&&&&&& this.title =
&&&&&&&&& }
&&&&&&&&& public String getGenre() {
&&&&&&&&&&&&&
&&&&&&&&& }
&&&&&&&&
&&&&&&&&& public void setGenre(String value) {
&&&&&&&&&&&&& this.genre =
&&&&&&&&& }
&&&&&&&&& public float getPrice() {
&&&&&&&&&&&&&
&&&&&&&&& }
&&&&&&&&& public void setPrice(float value) {
&&&&&&&&&&&&& this.price =
&&&&&&&&& }
&&&&&&&&& public XMLGregorianCalendar getPublishDate() {
&&&&&&&&&&&&& return publishD
&&&&&&&&& }
&&&&&&&&& public void setPublishDate(XMLGregorianCalendar value) {
&&&&&&&&&&&&& this.publishDate =
&&&&&&&&& }
&&&&&&&&& public String getDescription() {
&&&&&&&&&&&&&
&&&&&&&&& }
&&&&&&&&& public void setDescription(String value) {
&&&&&&&&&&&&& this.description =
&&&&&&&&& }
&&&&&&&&& public String getId() {
&&&&&&&&&&&&&
&&&&&&&&& }
&&&&&&&&& public void setId(String value) {
&&&&&&&&&&&&& this.id =
&&&&&&&&& }
&& 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:
&&&&& &?xml version="1.0" encoding="UTF-8" standalone="yes"?&
&&&&& &xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"&
&&&&&&& &xs:complexType name="bookdata"&
&&&&&&&&& &xs:sequence&
&&&&&&&&&&& &xs:element name="author" type="xs:string"/&
&&&&&&&&&&& &xs:element name="title" type="xs:string"/&
&&&&&&&&&&& &xs:element name="genre" type="xs:string"/&
&&&&&&&&&&& &xs:element name="price" type="xs:float"/&
&&&&&&&&&&& &xs:element name="publish_date" type="xs:anySimpleType"/&
&&&&&&&&&&& &xs:element name="description" type="xs:string"/&
&&&&&&&&& &/xs:sequence&
&&&&&&&&& &xs:attribute name="id" type="xs:string"/&
&&&&&&& &/xs:complexType&
&&&&& &/xs:schema&
请参阅 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 模式文件复制到临时目录。
&&&&&&& &xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"&
&&&&&&&&&& &xsd:element name="CatalogData"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&& &xsd:complexType &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&& &xsd:sequence&
&&&&&&&&&&&&&&&& &xsd:element name="books" type="bookdata" minOccurs="0"
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& maxOccurs="unbounded"/&
&&&&&&&&&&&&&& &/xsd:sequence&
&&&&&&&&&&&& &/xsd:complexType&
&&&&&&&&&& &/xsd:element&
&&&&&&&&&& &xsd:complexType name="bookdata"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&& &xsd:sequence&
&&&&&&&&&&&&&& &xsd:element name="author" type="xsd:string"/&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&& &xsd:element name="title" type="xsd:string"/&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&& &xsd:element name="genre" type="xsd:string"/&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&& &xsd:element name="price" type="xsd:float"/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&& &xsd:element name="publish_date" type="xsd:dateTime"/&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&& &xsd:element name="description" type="xsd:string"/&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&& &/xsd:sequence&
&&&&&&&&&&&& &xsd:attribute name="id" type="xsd:string"/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&& &/xsd:complexType&
&&&&&&&& &/xsd:schema&
&& 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 的更多信息。
xiaoyezi1128
浏览: 92033 次
来自: 天津
无法实现跨域调用,假设iframe的src=&ht ...
这个是什么意思了
这个方法受到浏览器的限制,不通用。
不错不错,我一直用&&,今天才知道和& ...

我要回帖

更多关于 java如何生成xml文件 的文章

 

随机推荐