web-dev-qa-db-ja.com

cvc-complex-type.2.4.a:要素「ProcessDesc」で始まる無効なコンテンツが見つかりました。期待されるProcessNameの1つ

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>

これを解決するのを手伝ってください。ありがとうございました。

12
user656213

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>
21
laune

この種のエラーは、次のいずれかの理由によるものです。


要素名の入力ミス。

スキーマに記述されていない要素を使用しようとしています。

要素の順序が正しくありません。

ルートタグまたは親要素のいずれかで宣言された名前空間定義は、要素で使用されているプレフィックスと一致しません(またはプレフィックスなし)。

Javaオブジェクトには、xsdに必要なnullフィールドがあります


5
Mohit Singh

シーケンスを使用する場合、各要素の順序を維持する必要があります

定義と使用法sequence要素は、子要素がシーケンスに表示される必要があることを指定します。各子要素は、0から任意の回数発生できます。

こちら をご覧ください

1
Xstian

これは単純なXSD検証エラーです... w3c

0
tituspenaligom