Validatorクラスを介してjaxbオブジェクトを検証しています。以下は、jaxbオブジェクトを検証するために使用しているコードです。しかし、検証中にこのエラーが発生しています。
jc = JAXBContext.newInstance(obj.getClass());
source = new JAXBSource(jc, obj);
Schema schema = schemaInjector.getSchema();
Validator validator = schema.newValidator();
validator.validate(source);
ERROR(SAXParseException):cvc-complex-type.2.4.a:要素 'ProcessDesc'で始まる無効なコンテンツが見つかりました。ProcessNameの1つが必要です
このエラーの原因となっているxsdで間違ったことを理解していない。 xsdファイルで定義されている要素は、エラーが発生している下にあります。
<xs:schema xmlns:cc="http://www.ms.com/cm.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ms.com/cm.xsd" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType name="Process">
<xs:sequence>
<xs:element name="ProcessId" type="xs:int" />
<xs:element name="ProcessName" type="xs:string" />
<xs:element name="ProcessDesc" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
これを解決するのを手伝ってください。ありがとうございました。
XML Sehemaコード
<xs:complexType name="Process">
<xs:sequence>
<xs:element name="ProcessId" type="xs:int" />
<xs:element name="ProcessName" type="xs:string" />
<xs:element name="ProcessDesc" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
次のように見えるはずのXMLについて説明します
<proc> <!-- of type Process -->
<ProcessId>123</ProcessId>
<ProcessName>procA</ProcessName>
<ProcessDesc>A funny process</ProcessDesc> <!-- this could be omitted -->
<proc>
しかし、XMLデータは次のようになります
<proc> <!-- of type Process -->
<ProcessId>123</ProcessId>
<ProcessDesc>A funny process</ProcessDesc>
<!-- ... don't know what follows -->
Id、Name、Descの順序を気にしない場合は、XMLスキーマを変更する必要があります。それ以外の場合は、XMLを修正する必要があります(簡単です)。
「要素の任意の順序」が良い考えだと思うなら、使用してください:
<xs:complexType name="Process">
<xs:all>
<xs:element name="ProcessId" type="xs:int" />
<xs:element name="ProcessName" type="xs:string" />
<xs:element name="ProcessDesc" type="xs:string" minOccurs="0" />
</xs:all>
</xs:complexType>
この種のエラーは、次のいずれかの理由によるものです。
要素名の入力ミス。
スキーマに記述されていない要素を使用しようとしています。
要素の順序が正しくありません。
ルートタグまたは親要素のいずれかで宣言された名前空間定義は、要素で使用されているプレフィックスと一致しません(またはプレフィックスなし)。
Javaオブジェクトには、xsdに必要なnullフィールドがあります
シーケンスを使用する場合、各要素の順序を維持する必要があります
定義と使用法sequence要素は、子要素がシーケンスに表示される必要があることを指定します。各子要素は、0から任意の回数発生できます。
こちら をご覧ください
これは単純なXSD検証エラーです... w3c