168.11. 模式验证

可从 Camel 2.11 开始

JAXB 数据格式支持通过汇总和从/到 XML 中提取和解包验证。您可以使用前缀 classpath:file:http: 指定资源通过解析的方式。您可以使用 ',' 字符分隔多个 schema 文件。

已知问题

Camel 2.11.0 和 2.11.1 通过验证并行多个 'Exchange's 来存在一个已知问题。请参阅 CAMEL-6630。这个问题已解决为 Camel 2.11.2/2.12.0。

使用 Java DSL,您可以使用以下方法进行配置:

JaxbDataFormat jaxbDataFormat = new JaxbDataFormat();
jaxbDataFormat.setContextPath(Person.class.getPackage().getName());
jaxbDataFormat.setSchema("classpath:person.xsd,classpath:address.xsd");

您可以使用 XML DSL 执行相同的操作:

<marshal>
    <jaxb id="jaxb" schema="classpath:person.xsd,classpath:address.xsd"/>
</marshal>

由于 JDK 附带的 Schema onnectionFactoryy 实例并非线程安全,Camel 将永久创建并组成了底层实例。
但是,如果您有一个 SchemaonnectionFactory y 实现线程安全,则可以配置 JAXB 数据格式来使用此数据:

JaxbDataFormat jaxbDataFormat = new JaxbDataFormat();
jaxbDataFormat.setSchemaFactory(thradSafeSchemaFactory);