说明
JAXB有个schemagen脚本,可以根据Java文件生成XML schema。这个工具在JAXB独立发布包中有,可以从官网下载JAXB的独立发布包:
https://eclipse-ee4j.github.io/jaxb-ri/
示例
使用schemagen -d
格式
其中-d
指明了XML schema文件的输出路径
如果要生成schema的Java文件没有引用外部的Java文件,可以使用这种方式。
例如,根据下面这个Java类生成XML schema文件。
package com.thb.server.register;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
// 使用了JAXB注解,映射到xml中的request元素
@XmlRootElement(name = "request")
@XmlType(propOrder = {"reqtype", "secret", "enterpriseAccount"})
public class RegisterRequest {
private String reqtype;
private String secret;
private String enterpriseAccount;
// 使用了JAXB注解,映射到xml中的reqtype元素
@XmlElement(name="reqtype", required = true)
public String getReqtype() {
return this.reqtype;
}
// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值
public void setReqtype(String reqtype) {
this.reqtype = reqtype;
}
// 使用了JAXB注解,映射到xml中的secret元素
@XmlElement(name="secret", required = true)
public String getSecret() {
return this.secret;
}
// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值
public void setSecret(String secret) {
this.secret = secret;
}
// 使用了JAXB注解,映射到xml中的body元素
@XmlElement(name = "body", required = true)
public String getEnterpriseAccount() {
return this.enterpriseAccount;
}
// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值
public void setEnterpriseAccount(String enterpriseAccount) {
this.enterpriseAccount = enterpriseAccount;
}
}
在cmd窗口下执行命令
schemagen -d D:tempoutschema D:tempeclipse-workspacejava_workpowe
r-restful-webservice-serversrcmainjavacomthbserverregisterRegisterRequest.java
生成的XML schema文件的内容:
?xml version="1.0" encoding="UTF-8" standalone="yes"?>
xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
xs:element name="request" type="registerRequest"/>
xs:complexType name="registerRequest">
xs:sequence>
xs:element name="reqtype" type="xs:string"/>
xs:element name="secret" type="xs:string"/>
xs:element name="body" type="xs:string"/>
/xs:sequence>
/xs:complexType>
/xs:schema>
使用schemagen -d -cp
格式
其中-cp
指明了classpath,注意中不包含包名。
如果要XML schema文件的Java文件引用了外部类,要使用-cp >指明寻找路径。
例如,下面是要生成XML schema文件的Java文件,Java的属性seeContent引用了一外部类SeeContent:
package com.thb.server.topology;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlType;
// 使用了JAXB注解,映射到xml中的request元素
@XmlRootElement(name = "request")
@XmlType(propOrder = {"reqtype", "secret", "seeContent"})
public class TopologyRequest {
private String reqtype;
private String secret;
private SeeContent seeContent;
// 使用了JAXB注解,映射到xml中的reqtype元素
@XmlElement(name="reqtype", required = tru服务器托管网e)
public String getReqtype() {
return this.reqtype;
}
// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值
public void setReqtype(String reqtype) {
this.reqtype = reqtype;
}
// 使用了JAXB注解,映射到xml中的secret元素
@XmlElement(name="secret", required = true)
public String getSecret() {
return this.secret;
}
// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值
public void setSecret(String secret) {
this.secret = secret;
}
// 使用了JAXB注解,映射到xml中的body元素
@XmlElement(name="body", required = true)
public SeeContent getSeeContent() {
return this.seeContent;
}
public void setSeeContent(SeeContent seeContent) {
this.seeContent = seeContent;
}
}
外部类SeeContent的定义:
package com.thb.server.topology;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlType;
@XmlType(propOrder = {"userid", "seeid", "upseeid", "status"})
class SeeContent{
private String userid;
private String seeid;
private String upseeid;
private String status;
// 使用了JAXB注解,映射到xml中body元素下面的userid元素
@XmlElement(name="userid", required = true)
String getUserid() {
return this.userid;
}
// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值
void setUserid(String userid) {
this.userid = userid;
}
// 使用了JAXB注解,映射到xml中body元素下面的seeid元素
@XmlElement(name="seeid", required = true)
String getSeeid() {
return this.seeid;
}
// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值
void setSeeid(String seeid) {
this.seeid = seeid;
}
// 使用了JAXB注解,映射到xml中body元素下面的upseeid元素
@XmlElement(name="upseeid", required = true)
String getUpseeid() {
return this.upseeid;
}
// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值
void setUpseeid(String upseeid) {
this.upseeid = upseeid;
}
// 使用了JAXB注解,映射到xml中body元素下面的status元素
@XmlElement(name="status", required = true)
String getStatus() {
return this.status;
}
// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值
void setStatus(String status) {
this.status = status;
}
}
在cmd窗口下执行命令:
schemagen -d D:tempoutschema -cp D:tempeclipse-workspacejava_work
power-restful-webservice-serversrcmainjava D:tempeclipse-workspacejava_workpower-restful-webservice-serversrcmainjavacomthbservertopologyTopologyRequest.java
生成的XML schema文件的内容:
?xml version="1.0" encoding="UTF-8" standalone="yes"?>
xs:schema version="1.0" xmlns:x服务器托管网s="http://www.w3.org/2001/XMLSchema">
xs:element name="request" type="topologyRequest"/>
xs:complexType name="topologyRequest">
xs:sequence>
xs:element name="reqtype" type="xs:string"/>
xs:element name="secret" type="xs:string"/>
xs:element name="body" type="seeContent"/>
/xs:sequence>
/xs:complexType>
xs:complexType name="seeContent">
xs:sequence>
xs:element name="userid" type="xs:string"/>
xs:element name="seeid" type="xs:string"/>
xs:element name="upseeid" type="xs:string"/>
xs:element name="status" type="xs:string"/>
/xs:sequence>
/xs:complexType>
/xs:schema>
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
近日,由德勤中国与深圳市商业联合会共同主办的“2023德勤深圳高科技高成长20强”榜单评选揭晓活动与颁奖盛典在深圳市南山区隆重举行。快金数据作为运力数据生态及运力场景解决方案领域的建设者与引领者,凭借多年企业级物流综合数字化技术创新与持续高质量成长,上榜“深圳…