验证XML与多个作为资源存储的XSD相匹配。Spring Boot

9 浏览
0 Comments

验证XML与多个作为资源存储的XSD相匹配。Spring Boot

我在Spring中花了很多时间验证XML与多个XSD的匹配性。即使我将所有XSD模式都提供给SchemaFactory,它仍然无法工作,因为主要模式无法看到主XSD文件中声明的import schema。即使我将这些模式作为文件提供,也无法工作,因为Spring的资源文件无法解析为绝对路径。

0
0 Comments

在Spring Boot应用程序中,当需要将XML验证为多个XSD(作为资源存储)时,可能会出现以下问题。

问题的原因是缺少解析XSD模式的依赖项。为了解决这个问题,需要添加以下依赖项到项目的构建文件中:

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

解决方法是创建两个bean。一个用于存储XSD文件(如果有`schemaLocation="..."`,它会自动查找其他文件),另一个用于验证XML的有效性。

首先,创建一个用于存储XSD的bean:

fun schema(): XsdSchemaCollection {

return CommonsXsdSchemaCollection(

ClassPathResource("xsd/main.xsd")

).also { it.setInline(true) }

}

然后,创建一个用于验证XML的有效性的bean,它使用前面创建的XSD模式bean:

fun myValidator(schema: XsdSchemaCollection): XmlValidator {

return schema.createValidator()

}

接下来,可以使用创建的验证器来验证XML:

private val myValidator: XmlValidator

fun validate(data: String): Array {

return myValidator.validate(StreamSource(data.byteInputStream()))

}

如果有任何验证异常,`Array`将包含异常列表。

通过以上步骤,我们可以在Spring Boot应用程序中使用多个XSD文件来验证XML的有效性。

0