用XML文件直接生成点.java文件
?
其次,win+R打开运行窗口,cmd进去,切换到C:\In目录下。
执行:java -jar trang.jar zhaoyx.xml zhaoyx.xsd? 命令,执行后,如图:
?
?
在C:\In目录下多了zhaoyx.xsd文件
?
再次,在运行窗口执行xjc -p zhaoyx zhaoyx.xsd 命令行,然后就开始解析和生成java了,如下图:
?
在C:\In目录下就多了生成的javabean
?
最后,修改这些javabean,生成javabean是xml文件的一个结构映射,工具不是非常智能,一些特殊情况,需要手工改。下面说一下常用的修改。
?
1、终结点有时候生成的不是基本类型,如我生成的CAGENT.java代码中有SERIALNO.java型变量,但这个节点是<SERIALNO></SERIALNO>,显然这个类型是多余的,我把它改成String型,多余的类删掉即可。
?
2、生成<STARTDATE class="sql-date">2012-09-14</STARTDATE>节点的类不能用,需要删掉STARTDATE类,自己添加StartDate类,代码如下:
package zhaoyx;
?
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlValue;
?
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "startdate")
public class StartDate {
???
??? @XmlAttribute(name = "class")
??? private String className;
???
??? @XmlValue
??? private String value;
??? public String getClassName() {
??????? return className;
??? }
??? public void setClassName(String className) {
??????? this.className = className;
??? }
??? public String getValue() {
??????? return value;
??? }
??? public void setValue(String value) {
??????? this.value = value;
??? }
}
在Jaxb转换xml前,为对象设值,需要
packet.getBussdocinfo().getStartdate().setClassName("sql-date");
packet.getBussdocinfo().getStartdate().setValue("2012-09-14");
?
3、设计到List集合行的成员变量时需要手工修改,下面是个改好的java类,可以参考
package zhaoyx;
?
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
??? "sumclause"
})
@XmlRootElement(name = "sumclauselist")
public class Sumclauselist {
??? @XmlElement(required = true)
??? protected List<Sumclause> sumclause;
?
??? public List<Sumclause> getSumclause() {
??????? return sumclause;
??? }
??? public void setSumclause(List<Sumclause> value) {
??????? this.sumclause = value;
??? }
}
生成的时候,这里不会是List类型。