web-dev-qa-db-fra.com

cvc-complex-type.2.4.a: un contenu non valide a été trouvé à partir de l'élément 'ProcessDesc'. Un de ProcessName attendu

Je valide mon objet jaxb via la classe Validator. Voici le code que j'utilise pour valider l'objet jaxb. Mais en le validant, j'obtiens cette erreur.

jc = JAXBContext.newInstance(obj.getClass());
source = new JAXBSource(jc, obj);
Schema schema = schemaInjector.getSchema();
Validator validator = schema.newValidator();
validator.validate(source);

ERREUR (SAXParseException): cvc-complex-type.2.4.a: un contenu non valide a été trouvé en commençant par l'élément 'ProcessDesc'. L'un de ProcessName était attend

Je ne comprends pas ce que j'ai fait de mal dans mon xsd, ce qui cause cette erreur. L'élément défini dans mon fichier xsd est ci-dessous pour lequel je reçois une erreur.

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

Veuillez m'aider à résoudre ce problème. Je vous remercie.

12
user656213

Le code 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>

décrit du XML qui devrait ressembler à

<proc> <!-- of type Process -->
  <ProcessId>123</ProcessId>
  <ProcessName>procA</ProcessName>
  <ProcessDesc>A funny process</ProcessDesc> <!-- this could be omitted -->
<proc>

Mais vos données XML ressemblent

<proc> <!-- of type Process -->
  <ProcessId>123</ProcessId>
  <ProcessDesc>A funny process</ProcessDesc>
  <!-- ... don't know what follows -->

Si vous ne vous souciez pas de l'ordre de Id, Name, Desc, vous devrez modifier le schéma XML. Sinon, vous devrez corriger le XML (ce qui est plus facile).

Si vous pensez que "n'importe quel ordre d'éléments" est une bonne idée, utilisez:

<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

Ce type d'erreurs est dû à l'une des raisons suivantes


Le nom de l'élément est mal tapé.

L'élément non décrit dans le schéma tente d'être utilisé.

Les éléments sont dans un ordre incorrect.

Les définitions d'espace de noms déclarées dans la balise racine ou dans un élément parent ne correspondent pas au préfixe (ou à aucun préfixe) utilisé dans l'élément.

L'objet Java a un champ nul requis dans xsd


5
Mohit Singh

Si vous utilisez une séquence, vous devez garder l'ordre de chaque élément

Définition et utilisation L'élément séquence spécifie que les éléments enfants doivent apparaître dans une séquence. Chaque élément enfant peut apparaître de 0 à un nombre illimité de fois.

voir ici

1
Xstian

Il s'agit d'une simple erreur de validation XSD ... w3c

0
tituspenaligom