在 Apache Camel xml 验证中使用 xsi:schemaLocation 属性

Utilizing xsi:schemaLocation attribute on Apache Camel xml validation

在 camel 中,我们使用 validator:com/mypackage/myschema.xsd 进行 xml 验证。 ValidatorResourceResolver 不会从 xml 的 xsi:schemaLocation 属性中发现架构吗?

what is the use of xsi:schemaLocation? camel xml 解析器使用这个 XSD 还是我们必须显式调用验证器?

据我所知,未使用架构位置。您必须显式调用验证器。

这意味着如果您从不同的模式获得 XML,您必须查找 namespace-identifier 并基于此,使用 正确的模式验证.

要查找 namespace-identifier,您可以使用 XPath

.setHeader("xml_namespace", xpath("namespace-uri(/*)").stringResult().saxon())

像这样,命名空间保存在消息中 header,您稍后可以使用它来决定您需要为验证器使用哪个模式文件。例如,在 choice/when 块中直接在路由中或在 Java bean 中,该 bean 包含一个以名称空间为键且模式文件路径为值的映射。

最后,您可以将验证器作为动态端点调用(注意 toD 中的 D

.toD("validator:${headers.schemafilepath}")