在使用xjc 和schemagen 工具时,请考虑我们在java 中使用的相同概念。在java中,每个类都是一个骨架,对象是一个实例。就像我们需要将 XSD 视为骨架,将 XML 视为实例一样。
xjc 工具:- Xsd to Java Class 或 Unmarshaling
以下面的带有命名空间的 XSD 为例。 xjc 工具将生成 java 类以及 package-info 和 object-factory。
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ir="http://irctc.org/service" targetNamespace="http://irctc.org/service">
<xsd:element name="Customer" type="ir:CustomerType"/>
<xsd:complexType name="CustomerType">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="src" type="xsd:string"/>
<xsd:element name="dest" type="xsd:string"/>
<xsd:element name="price" type="xsd:float" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
使用下面的命令
D:\>xjc Customer.xsd
parsing a schema...
compiling a schema...
org\irctc\service\CustomerType.java
org\irctc\service\ObjectFactory.java
org\irctc\service\package-info.java
注意:-如果你有多个java类,那么你可以使用jaxb.index文件而不是ObjectFactory.java。
架构工具:- Java Class to Xsd 或 Marshaling
假设我们要使用 java 类生成 Xsd 文件,那么首先我们需要在拥有 CustomerType.java 的同一包中创建 ObjectFactory.java 或 jaxb.index 文件和 package-info.java。
package org.irctc.service;
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;
@XmlRootElement("Customer")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "CustomerType", propOrder = {
"name",
"src",
"dest",
"price"
})
public class CustomerType {
@XmlElement(required = true)
protected String name;
@XmlElement(required = true)
protected String src;
@XmlElement(required = true)
protected String dest;
protected Float price;
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
public String getSrc() {
return src;
}
public void setSrc(String value) {
this.src = value;
}
public String getDest() {
return dest;
}
public void setDest(String value) {
this.dest = value;
}
public Float getPrice() {
return price;
}
public void setPrice(Float value) {
this.price = value;
}
}
使用下面的命令
D:\>schemagen org.irctc.service.CustomerType
Note: Writing D:\schema1.xsd
上述命令将生成 xsd 文件。 java类的包将被视为xsd命名空间。
The above details are only for understanding marshaling and unmarshaling process using tools in Jax-B API.
For more details , check below examples
Jax-B Hello World Example
Java-XML mapping with Jax-B 2.0