J'ai du code Java qui valide le XML par rapport à un XSD. J'utilise une version modifiée du gestionnaire d'erreurs trouvé ici: http://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapi.html pour attraper et enregistrer toutes les exceptions lors de la validation.Traduction des exceptions SAX
Les erreurs sont très laconiques, ils ressemblent à ceci:
http://www.w3.org/TR/xml-schema-1#cvc-complex-type.2.4.a?s:cID&{"http://www.myschema.com/schema":txn}
D'autres messages tels que
http://www.w3.org/TR/xml-schema-1#cvc-complex-type.2.4.a?s:attributes&{"http://www.myschema.com/schema":sequence}
sont encore plus énigmatiques.
Existe-t-il un moyen facile d'obtenir un message clair et intelligible à partir de SAX expliquant ce qui s'est passé ici? Je pense que dans la première erreur, il attendait txn
et à la place trouvé l'élément cID
. MAIS ... Je ne connais pas toutes les erreurs possibles qui pourraient être générées par SAX, donc je préfère ne pas essayer de créer manuellement une table de traduction.
Les utilisateurs éventuels de cette sortie sont pour la plupart non techniques, je dois donc pouvoir générer des messages simples et clairs tels que "l'élément txn
était hors séquence".
Si elle aide, voici le code (plus ou moins) qui est utilisé pour la validation:
Source schema1 = new StreamSource(new File("resources/schema1.xsd"));
Source schema2 = new StreamSource(new File("resources/schema2.xsd"));
Source[] sources = {schema1,schema2};
validator = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(sources).newValidator();
ErrorHandler lenient = new ForgivingErrorHandler();
validator.setErrorHandler(lenient);
Ailleurs ...
StreamSource xmlSource = new StreamSource(new StringReader(XMLData));
try
{
validator.validate(xmlSource);
}
catch (SAXException e)
{
logger.error("XML Validation Error: ",e);
}