10.7. validator


验证器根据路由定义上声明的 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. 支持的验证器

validator描述

predicate Validator

使用 Expression 或 Predicate 进行验证

端点验证器

通过转发到要与验证组件(如 Validation Component 或 Bean Validation 组件)一起使用的 Endpoint 验证。

自定义验证器

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

10.7.3. 常见选项

所有验证器都必须包含指定要验证的 Data type 的 type 选项。

10.7.4. predicate Validator 选项

Name描述

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

Name描述

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的子类

Name描述

ref

对自定义 Validator Bean ID 的引用。

className

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

指定自定义 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. 第一部分

声明 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 中使用 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.