我们使用 JAXB 进行 Java-xml 绑定。我们最初创建了域类,然后使用schemagen命令行工具生成了以下模式。但生成的架构无效,给出以下错误消息。
错误消息: cos-all-limited.1.2:一个所有模型组必须出现在一个粒子中,{min 发生} = {max 出现} = 1,并且该粒子必须是构成 {content type} 的一对的一部分复杂的类型定义。
用例:
有两个类 Emp(Base class) 和 Dept(Child class)。
1. 元素顺序没有限制(即empId、deptId、deptName可以以任意顺序出现)。所以我们使用了 xs:all element
2。在 Dept 类中,deptId 字段应该只出现一次(minOccurs =1,maxOccurs=1),deptName 是可选的。
根据我的用例,我无法生成有效的模式。我确实在谷歌上搜索过。但我找不到解决方案。所以我期待专家可以回答这个问题。您能否查看以下课程,模式并指导我正确的方向。
注意:请不要建议我创建一些临时域类。
感谢期待。
Emp.java
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="EmpType", propOrder={})
@XmlRootElement
public class Emp {
@XmlElement(name="empId", required = true)
private String empId;
}
java部门
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="DeptType", propOrder={})
public class Dept extends Emp
{
@XmlElement(name="deptId", required = true)
private String deptId;
private String deptName;
}
Schema1.xsd
<?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="emp" type="EmpType"/>
<xs:complexType name="EmpType">
<xs:sequence>
<xs:element name="empId" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DeptType">
<xs:complexContent>
<xs:extension base="EmpType">
<xs:all> <!--showing error message, mentioned above -->
<xs:element name="deptId" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="deptName" type="xs:string" minOccurs="0"/>
</xs:all>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>