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