У меня есть некоторый код Java, который проверяет XML на соответствие XSD. Я использую измененную версию обработчика ошибок, найденную здесь: http://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapi.html, чтобы перехватывать и регистрировать ВСЕ исключения во время проверки.
Ошибки очень краткие, они выглядят примерно так:
http://www.w3.org/TR/xml-schema-1#cvc-complex-type.2.4.a?s:cID&{"http://www.myschema.com/schema":txn}
Другие сообщения, такие как
http://www.w3.org/TR/xml-schema-1#cvc-complex-type.2.4.a?s:attributes&{"http://www.myschema.com/schema":sequence}
еще более загадочны.
Есть ли простой способ получить ясное и понятное сообщение из SAX, объясняющее, что здесь пошло не так? Я думаю, что в первой ошибке он ожидал txn
и вместо этого нашел элемент cID
. НО ... Я не знаю всех возможных ошибок, которые могут генерировать SAX, поэтому я бы не стал пытаться вручную создавать таблицу перевода.
Возможные пользователи этого вывода в основном нетехнические, поэтому мне нужно иметь возможность генерировать простые и понятные сообщения, такие как «элемент txn
был вне последовательности».
Если это поможет, вот код (более или менее), который используется для проверки:
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);
В другом месте ...
StreamSource xmlSource = new StreamSource(new StringReader(XMLData) );
try
{
validator.validate(xmlSource);
}
catch (SAXException e)
{
logger.error("XML Validation Error: ",e);
}