10.7. 验证器


验证器会根据声明了在声明了预期消息类型的路由定义中声明的 输入类型 和/或输出类型来执行消息的声明性验证。

注意

只有在类型声明上的 validate 属性为 true 时才执行验证。

如果输入类型和/或输出类型声明上的 validate 属性为 true,则 camel 内部处理器会从注册表查找对应的 Validator。

10.7.1. 数据类型格式

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

10.7.2. 支持的 Validators

验证器描述

predicate Validator

使用 Expression 或 Predicate 验证

endpoint Validator

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

Custom Validator

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

10.7.3. 常见选项

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

10.7.4. predicate Validator 选项

Name描述

expression

用于验证的表达式或指示。

指定验证 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. 端点验证选项

Name描述

Ref

引用端点 ID。

uri

端点 URI.

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

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

在 XML DSL 中指定端点 ref 的示例:

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

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

10.7.6. Custom Validator 选项

注意

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

Name描述

Ref

引用自定义验证器 bean ID。

className

自定义 Validator 类的完全限定类名称。

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

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. 第 I 部分

声明 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 端点收到消息时,上述验证器将应用于以下路由定义。

注意

在 XML DSL 中,使用 inputType WithValidate 而不是 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.