Когда я хочу проверить свои XML-документы на соответствие схеме в моей серверной Java, я использую встроенную реализацию JRE Xerces и javax.xml.validation.Schema. Он работает нормально, но при сбое проверки Xerces выдает сообщения об ошибках, которые очень близки к бесполезным, например:
cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type 'PopulatedStringType'
Для диагностики и отслеживания конкретной части XML-документа, не прошедшей проверку, может потребоваться время, и все из-за плохого сообщения об ошибке.
Итак, мой вопрос: используете ли вы альтернативные средства проверки XML по схеме, которые дают более полезный результат при неудачной проверке?
Обратите внимание, что это серверная Java, поэтому, пожалуйста, не говорите «использовать XML Spy» или что-то подобное.
+1 @toolkit Вы можете подумать о том, чтобы потратить немного времени на изучение сообщений об ошибках Xerces. Я сомневаюсь, что другой валидатор был бы намного понятнее.
Я прекрасно понимаю сообщение, но вы пытаетесь найти, какая часть 10-мегабайтного XML-документа нарушает схему, если в сообщении об ошибке вам ничего не сказано. Эти документы содержат тысячи элементов PopulatedStringType с множеством разных имен элементов. Найти подходящую практически невозможно.




Мы используем Oracle XDK (комплект разработчика XML), который включает xmlparserv2.jar с проверяющим парсером и XSLT 2.0. Он использует JAXB API, поэтому вам нужно только добавить его в свой путь к классам и изменить свой импорт. Он выдает ошибки, которые не идеальны, но я бы сказал, что их легче понять, чем ваш пример.
xmlstarlet (xmlstar.sourceforge.net/) - это набор инструментов командной строки. вы можете запустить его с помощью Runtime.exec () для заданного xml (пока xml находится в файле).
Мы используем Кастор.
Castor is an Open Source data binding framework for Java[tm]. It's the shortest path between Java objects, XML documents and relational tables. Castor provides Java-to-XML binding, Java-to-SQL persistence, and more.
Почему вы используете Castor и как это помогает в моей проблеме?
В вашем обработчике для проверки вы должны получить SAXParseException с этим сообщением, а также номер столбца и номер строки в XML-файле. Разве это не так?
Если у вас возникли проблемы с интерпретацией ошибок Xerces и вы хотите что-то, что поможет выделить, где в вашем документе вы нарушили правила, ознакомьтесь с некоторыми инструментами создания XML, такими как кислород.

(source: oxygenxml.com)
После того, как вы свяжете схему с вашим экземпляром XML-документа, редактор выделит проблемную область документа и предоставит вам описание нарушения.
Кроме того, вы можете использовать разные механизмы для выполнения проверки:
oXygen has built-in support for: Xerces, LIBXML, XSV, Saxon SA, MSXML4.0, MSXML .NET and SQC.
звучит для меня довольно ясным сообщением об ошибке: оно указывает на то, что тип PopulatedStringType, указанный в вашей схеме XML, имеет аспект minLength, который был нарушен вашим экземпляром XML?