В верблюде мы используем validator:com/mypackage/myschema.xsd
для проверки xml. Разве ValidatorResourceResolver
не обнаружит схему из атрибута xsi:schemaLocation
xml?
какая польза от xsi:schemaLocation? Использует ли синтаксический анализатор xml верблюда этот XSD или нам нужно явно вызывать валидатор?
Насколько я знаю, расположение схемы не используется. Вы должны вызвать валидатор явно.
Это означает, что если вы получили XML-файлы из разных схем, вам нужно найти идентификатор пространства имен и на его основе использовать правильную схему для проверки.
Чтобы найти идентификатор пространства имен, вы можете использовать XPath
.setHeader("xml_namespace", xpath("namespace-uri(/*)").stringResult().saxon())
Таким образом, пространство имен сохраняется в заголовке сообщения, и вы можете использовать его позже, чтобы решить, какой файл схемы вам нужно использовать для валидатора. Например, в блоке choice/when
непосредственно в маршруте или в Java-бине, который содержит карту с пространством имен в качестве ключа и путем к файлу схемы в качестве значения.
Наконец, вы можете вызвать валидатор как динамическую конечную точку (обратите внимание на D
в toD
).
.toD("validator:${headers.schemafilepath}")