Java-xml バインディングに JAXB を使用しています。最初にドメイン クラスを作成し、次にschemagenコマンドライン ツールを使用して、次のスキーマが生成されました。しかし、生成されたスキーマは有効ではなく、次のエラー メッセージが表示されます。
エラー メッセージ: cos-all-limited.1.2: すべてのモデル グループは、{最小発生数} = {最大発生数} = 1 のパーティクルに出現する必要があり、そのパーティクルは、{コンテンツ タイプ} を構成するペアの一部である必要があります。複合型定義。
ユース ケース:
Emp (基本クラス) と Dept (子クラス) の 2 つのクラスがあります。
1. 要素の順序に制限はありません (つまり、empId、deptId、および deptName は任意の順序で表示できます)。そのため、xs:all 要素を使用し
ました。 2. Dept クラスでは、deptId フィールドは 1 回だけ出現する必要があり (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>