首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

用XML资料直接生成点.java文件

2013-07-16 
用XML文件直接生成点.java文件?其次,win+R打开运行窗口,cmd进去,切换到C:\In目录下。执行:java -jar trang.

用XML文件直接生成点.java文件

?

其次,win+R打开运行窗口,cmd进去,切换到C:\In目录下。

执行:java -jar trang.jar zhaoyx.xml zhaoyx.xsd? 命令,执行后,如图:


用XML资料直接生成点.java文件
?

?

在C:\In目录下多了zhaoyx.xsd文件


用XML资料直接生成点.java文件
?

再次,在运行窗口执行xjc -p zhaoyx zhaoyx.xsd 命令行,然后就开始解析和生成java了,如下图:


用XML资料直接生成点.java文件

?

在C:\In目录下就多了生成的javabean


用XML资料直接生成点.java文件
?
最后,修改这些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类型。

热点排行