在 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}")
在 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}")