Cvc-complex-type.2.4.a: был найден недопустимый контент, начиная с элемента "ProcessDesc". Ожидается одно из ожиданий ProcessName

Я проверяю свой объект jaxb через класс Validator. Ниже приведен код, который я использую для проверки объекта 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

Я не понимаю, что я сделал неправильно в моем 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>

Пожалуйста, помогите мне решить эту проблему. Спасибо.

Ответ 1

Код 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>

Ответ 2

Подобные ошибки вызваны одной из следующих причин:


Название элемента опечатано.

Элемент, не описанный в схеме, пытается использоваться.

Элементы в неправильном порядке.

Определения пространства имен, объявленные либо в корневом теге, либо в родительском элемент не совпадает с префиксом (или без префикса), используемым в Элемент.

Java-объект имеет нулевое поле, обязательное для заполнения в xsd


Ответ 3

Если вы используете последовательность, вы должны сохранить порядок каждого элемента

Определение и использование Элемент sequence указывает, что дочерние элементы должны появляться в последовательности. Каждый дочерний элемент может встречаться от 0 до любого количества раз.

см. здесь

Ответ 4

Это простая ошибка проверки XSD... w3c