Xsd JAXB和使用schemagen对部分模式进行验证?
非常概括和简化的场景描述:Xsd JAXB和使用schemagen对部分模式进行验证?,xsd,jaxb,Xsd,Jaxb,非常概括和简化的场景描述: 应用程序通过UI构建JAXB实例 JAXB实例是分不同步骤构建的,最后是组合的 完成此操作后,我必须针对XSD对每个步骤中创建的JAXB实例进行验证,以验证UI层没有构建无意义的内容 现在模式定义了复杂类型A,B和C。模式指定XML文档必须有顶层元素A,这可以包含多个B,这可以选择包括C。我为B创建JAXB实例,并绝对希望在将其嵌套到A下之前根据XSD中的复杂类型定义进行验证。但是,如果根据整个XSD 问题:如何仅针对XSD的一部分验证JAXB实例,该XSD的类是
- 应用程序通过UI构建JAXB实例
- JAXB实例是分不同步骤构建的,最后是组合的
- 完成此操作后,我必须针对XSD对每个步骤中创建的JAXB实例进行验证,以验证UI层没有构建无意义的内容
注意:在现实中,模式并不像上面的示例中那样简单,创建一些始终有效的模拟的解决方案是不可行的。更不用说这种验证至少要在上百个地方进行。事实证明,使用xsi:type就可以实现这一点
为要验证的元素创建单独的架构,其中该元素位于根级别。
为了解决丢失的@ XMLROOTTAG,请参阅> P>在使用<代码> XJC> /COD>和
Xsd到Java类
或解组
例如,考虑下面带有名称空间的XSD。xjc
工具将生成java类以及包信息和对象工厂
<?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:\>schemagen org.irctc.service.CustomerType
注意:写入D:\schema1.xsd
上面的命令将生成xsd文件。java类的包将被视为xsd名称空间
以上详细信息仅用于理解使用Jax-B API中的工具进行封送和解封送的过程。
有关详细信息,请查看以下示例
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;
}
}