在NetBeans下根据xml schema创建java类
在我的上篇文章"在NetBeans下将Java对象映射到XML文档",利用NetBeans模板代码将Person对象的数据序列化到一个xml文档中(后面称之为instant document)。本篇介绍如何使用NetBeans6.7.1从一个xsd文件(后面称之为xml schema)创建一个Java类。Person.xml内容大体如下(去掉第一行和最后一行)
我们需要一个描述java类的xml schema,这里为了简单起见,借用vs.net2005的工具xsd.exe,xsd可以根据instant document的内容推测出一个xml schema文件。在visual studio 2005 command prompt环境下执行如下命令:(假设Person.xml文件在c:)
C:Program FilesMicrosoft Visual Studio 8VC>xsd c:Person.xml
xsd.exe虽然简单,但是有一些缺点,比如生成的类型都成了string,下面是生成的xsd文件内容:
类型都成了xs:string。xml schema的语法以后我会另起一篇文章介绍。比较正式的做法一般是先设计xml schema,然后生成java类(虽然我更喜欢先写Java代码,然后导出xml schema)。
现在,我们用NetBeans创建一个Java Application工程,名称为SchemaToClass。右键点击工程,选择创建,在下面的对话框中选择xml,然后选中JAXB Binding:
点击Next按钮,如下图,进行设置:
Binding Name设置为Person,Package Name设置为freebird,Schema File选中Person.xsd文件。然后点击Finish按钮。代码生成了,如下:(注释已经去掉)
package freebird;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"name",
"sex"
})
@XmlRootElement(name = "Test")
public class Test {
protected String name;
protected String sex;
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
public String getSex() {
return sex;
}
public void setSex(String value) {
this.sex = value;
}
}
类名为Test是因为我在前一篇文档中有这个设置:@XmlRootElement(name="Test",namespace="freebird"),把Test改回来就可以了。