Ant “创建的xml架构”;Schemagen“;蚂蚁的任务可以定制更多吗?
现在,我有两个这样的Java类Ant “创建的xml架构”;Schemagen“;蚂蚁的任务可以定制更多吗?,ant,xsd,jaxb,schemagen,Ant,Xsd,Jaxb,Schemagen,现在,我有两个这样的Java类 public class HogeDomain { private User userDomain; public HogeDomain() { } and getter/setter.. } public class User { public User() { } private String id; private String password; privat
public class HogeDomain {
private User userDomain;
public HogeDomain() {
}
and getter/setter..
}
public class User {
public User() {
}
private String id;
private String password;
private Date userDate;
and getter/setter..
}
然后,我在上面创建了一个xml模式,用于自动使用Ant任务的“Schemagen”
就是这个
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="hogeDomain">
<xs:sequence>
<xs:element name="userDomain" type="user" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="user">
<xs:sequence>
<xs:element name="id" type="xs:string" minOccurs="0"/>
<xs:element name="password" type="xs:string" minOccurs="0"/>
<xs:element name="userDate" type="xs:dateTime" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
但我确实想创建一个这样的xml模式,以使用JAXB编组或解编组
<?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="hogeDomain">
<xs:complexType>
<xs:sequence>
<xs:element ref="userDomain" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="userDomain">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:string" minOccurs="0"/>
<xs:element name="password" type="xs:string" minOccurs="0"/>
<xs:element name="userDate" type="xs:dateTime" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
如何使用“Schemagen”Ant任务创建此xml模式?
我不想为手工制作的文档编写xml模式
如果不能,有什么解决方案吗?您可以执行以下操作:
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement
@XmlType(name="")
public class HogeDomain {
private User userDomain;
@XmlElementRef
public User getUserDomain() {
return userDomain;
}
public void setUserDomain(User userDomain) {
this.userDomain = userDomain;
}
}
及
要生成以下架构:
<?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="hogeDomain">
<xs:complexType>
<xs:sequence>
<xs:element ref="user"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="user">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
</xs:schema>
谢谢布莱斯!有没有其他方法可以不用在Java类中进行注释来完成?我希望尽可能不使用注释来完成这项工作……您是否已在EclipseLink JAXB(MOXy)中签出XML映射文件:
<?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="hogeDomain">
<xs:complexType>
<xs:sequence>
<xs:element ref="user"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="user">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
</xs:schema>
import java.io.IOException;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.SchemaOutputResolver;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(HogeDomain.class);
jc.generateSchema(new MySOR());
}
private static class MySOR extends SchemaOutputResolver {
@Override
public Result createOutput(String namespaceUri, String suggestedFileName) throws IOException {
StreamResult result = new StreamResult(System.out);
result.setSystemId(suggestedFileName);
return result;
}
}
}