10.7. 验证器


验证器根据声明的 Input Type 和/或 Output Type 在声明预期的消息类型的路由定义上执行消息的声明验证。

注意

只有在 type 声明上的 validate 属性为 true 时,才会执行验证。

如果 Input Type 和/或 Output Type 声明上的 validate 属性为 true,则 camel 内部处理器会从 registry 中查找对应的 Validator。

10.7.1. 数据类型格式

数据类型的格式是 scheme:name,其中 scheme 是数据模型的类型,如 javaxmljsonname 是数据类型名称。

10.7.2. 支持的验证器

验证器描述

predicate Validator

使用 Expression 或 Predicate 进行验证

端点验证器

通过转发到 Endpoint 以用于验证组件(如 Validation 组件或 Bean Validation 组件)进行验证。

自定义验证器

使用自定义验证器类进行验证。验证器必须是 org.apache.camel.spi.Validator的子类

10.7.3. 常见选项

所有验证器都必须包含指定要验证的数据类型的 type 选项。

10.7.4. predicate Validator 选项

名称描述

expression

用于验证的 expression 或 Predicate。

指定验证 predicate 的示例:

Java DSL:

validator()
    .type("csv:CSVOrder")
    .withExpression(bodyAs(String.class).contains("{name:XOrder}"));

XML DSL:

<predicateValidator Type="csv:CSVOrder">
    <simple>${body} contains 'name:XOrder'</simple>
</predicateValidator>

10.7.5. 端点验证器选项

名称描述

Ref

引用端点 ID。

uri

端点 URI.

在 Java DSL 中指定端点 URI 的示例:

validator()
    .type("xml")
    .withUri("validator:xsd/schema.xsd");

在 XML DSL 中指定 endpoint ref 的示例:

<validators>
<endpointValidator uri="validator:xsd/schema.xsd" type="xml"/>
</validators>
注意

Endpoint Validator 将消息转发到指定的端点。在上例中,camel 将消息转发到 validator: 端点,它是 Validation 组件。您还可以使用不同的验证组件,如 Bean Validation 组件。

10.7.6. 自定义验证器选项

注意

Validator 必须是 org.apache.camel.spi.Validator的子类

名称描述

Ref

引用自定义 Validator bean ID。

className

自定义验证器类的完全限定类名称。

指定自定义验证器类的示例:

Java DSL:

validator()
    .type("json")
    .withJava(com.example.MyCustomValidator.class);

XML DSL:

<validators>
<customValidator className="com.example.MyCustomValidator" type="json"/>
</validators>

10.7.7. 验证器示例

本例分为两个部分,第一部分声明 Endpoint Validator 来验证消息。第二个部分演示了如何将验证器应用到路由。

10.7.7.1. 第一部分

声明 Endpoint Validator,它使用验证器组件从 xml:ABCOrder 验证。

Java DSL:

validator()
    .type("xml:ABCOrder")
    .withUri("validator:xsd/schema.xsd");

XML DSL:

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <validators>
        <endpointValidator uri="validator:xsd/schema.xsd" type="xml:ABCOrder"/>
    </validators>
</camelContext>

10.7.7.2. 第 II 部分

direct:abc 端点接收消息时,上面的验证器应用于以下路由定义。

注意

在 Java DSL 中使用 inputTypeWithValidate 而不是 inputType,在 XML DSL 中,inputType 声明的 validate 属性被设置为 true

Java DSL:

from("direct:abc")
    .inputTypeWithValidate("xml:ABCOrder")
    .log("${body}");

XML DSL:

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="direct:abc"/>
        <inputType urn="xml:ABCOrder" validate="true"/>
        <log message="${body}"/>
    </route>
</camelContext>
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.