Проверка XML по нескольким XSD (хранится как ресурсы). Весенний ботинок - PullRequest
0 голосов
/ 28 апреля 2020

Я потратил много времени на проверку XML против нескольких XSD в Spring. Даже когда я передаю все схемы XSD в SchemaFactory, это не работает, потому что основная схема не может видеть import schema, объявленную в основном файле XSD. Даже когда я даю эту схему в виде файлов, она не работает, потому что Spring's файлы ресурсов не могут быть преобразованы в абсолютные path.

<xs:import namespace="http://test.com/types" schemaLocation="types.xsd"/>

1 Ответ

0 голосов
/ 28 апреля 2020

1. Сначала нам нужна эта зависимость, которая может анализировать схемы xsd:

implementation("org.apache.ws.xmlschema:xmlschema-core:2.2.4")

2. Мы создаем 2 бобов. Один для хранения нашего XSD's (он автоматически найдет другие файлы, если есть этот schemaLocation="..."), другой для нашего Validator:

    @Bean
    fun schema(): XsdSchemaCollection {
        return CommonsXsdSchemaCollection(
            ClassPathResource("xsd/main.xsd")
        ).also { it.setInline(true) }
    }

    @Bean
    fun myValidator(schema: XsdSchemaCollection): XmlValidator {
        return schema.createValidator()
    }

3. И мы можем использовать его:

    @Autowired
    private val myValidator: XmlValidator

    fun validate(data: String): Array<SAXParseException> {
        return myValidator.validate(StreamSource(data.byteInputStream()))
    }

Array<SAXParseException> будет содержать список исключений проверки, если таковые имеются

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...