65.3. 配置 Bean 验证


65.3.1. JAX-WS 配置

概述

这部分论述了如何在 JAX-WS 服务端点中启用 bean 验证,该端点在 Blueprint XML 或 Spring XML 中定义。用于执行 bean 验证的拦截器在 JAX-WS 端点和 JAX-RS 1.1 端点(JAX-RS 2.0 端点)都很常见(但使用不同的拦截器类)。

命名空间

在本节所示的 XML 示例中,您必须记得将 jaxws 命名空间前缀映射到适当的命名空间,可以是 Blueprint 或 Spring,如下表中所示:

Expand
XML 语言命名空间

蓝图(Blueprint)

http://cxf.apache.org/blueprint/jaxws

Spring

http://cxf.apache.org/jaxws

Bean 验证功能

在 JAX-WS 端点上启用 Bean 验证的最简单方式是将 bean 验证功能 添加到端点。Bean 验证功能由以下类实现:

org.apache.cxf.validation.BeanValidationFeature
通过将此功能类的实例添加到 JAX-WS 端点(通过 Java API,或通过 XML 中的 jaxws: features 子元素),您可以在端点上启用 bean 验证。此功能安装两个拦截器:一个拦截器验证传入的消息数据;以及验证返回值的 Out 拦截器(其中,拦截器会使用默认配置参数创建)。

带有 bean 验证功能的 JAX-WS 配置示例

以下 XML 示例演示了如何在 JAX-WS 端点中启用 bean 验证功能,方法是在端点中添加 commonValidationFeature bean 作为 JAX-WS 功能:

<jaxws:endpoint xmlns:s="http://bookworld.com"
                serviceName="s:BookWorld"
                endpointName="s:BookWorldPort"
                implementor="#bookWorldValidation"
                address="/bwsoap">
    <jaxws:features>
        <ref bean="commonValidationFeature" />
    </jaxws:features>
</jaxws:endpoint>

<bean id="bookWorldValidation" class="org.apache.cxf.systest.jaxrs.validation.spring.BookWorldImpl"/>

<bean id="commonValidationFeature" class="org.apache.cxf.validation.BeanValidationFeature">
    <property name="provider" ref="beanValidationProvider"/>
</bean>

<bean id="beanValidationProvider" class="org.apache.cxf.validation.BeanValidationProvider">
    <constructor-arg ref="validationProviderResolver"/>
</bean>

<bean id="validationProviderResolver" class="org.example.HibernateValidationProviderResolver"/>
Copy to Clipboard Toggle word wrap

有关 HibernateValidationProviderResolver 类的示例实现,请参阅 “HibernateValidationProviderResolver 类示例”一节。只需要在 OSGi 环境(Apache Karaf)环境中配置 beanValidationProvider

注意

根据具体情况,请记住将 jaxws 前缀映射到蓝图或 Spring 的相应 XML 命名空间。

Common bean 验证 1.1 拦截器

如果要对 bean 验证的配置具有更精细的控制,您可以单独安装拦截器,而不是使用 bean 验证功能。要代替 bean 验证功能,您可以配置以下拦截器之一或两者:

org.apache.cxf.validation.BeanValidationInInterceptor
在 JAX-WS (或 JAX-RS 1.1)端点中安装时,根据验证限制验证资源方法参数。如果验证失败,则引发 javax.validation.ConstraintViolationException 异常。要安装此拦截器,请通过 XML 中的 jaxws:inInterceptors 子元素(或 XML 中的 jaxrs:inInterceptors 子元素)将其添加到端点。
org.apache.cxf.validation.BeanValidationOutInterceptor
在 JAX-WS (或 JAX-RS 1.1)端点中安装时,根据验证限制验证响应值。如果验证失败,则引发 javax.validation.ConstraintViolationException 异常。要安装此拦截器,请通过 XML 中的 jaxws:outInterceptors 子元素(或 XML 中的 jaxrs:outInterceptors 子元素)将其添加到端点。

带有 bean 验证拦截器的 JAX-WS 配置示例

以下 XML 示例演示了如何在 JAX-WS 端点中启用 bean 验证功能,方法是明确将相关的 In 拦截器 bean 和 Out 拦截器 bean 添加到端点:

<jaxws:endpoint xmlns:s="http://bookworld.com"
                serviceName="s:BookWorld"
                endpointName="s:BookWorldPort"
                implementor="#bookWorldValidation"
                address="/bwsoap">
    <jaxws:inInterceptors>
        <ref bean="validationInInterceptor" />
    </jaxws:inInterceptors>

    <jaxws:outInterceptors>
        <ref bean="validationOutInterceptor" />
    </jaxws:outInterceptors>
</jaxws:endpoint>

<bean id="bookWorldValidation" class="org.apache.cxf.systest.jaxrs.validation.spring.BookWorldImpl"/>

<bean id="validationInInterceptor" class="org.apache.cxf.validation.BeanValidationInInterceptor">
    <property name="provider" ref="beanValidationProvider"/>
</bean>
<bean id="validationOutInterceptor" class="org.apache.cxf.validation.BeanValidationOutInterceptor">
    <property name="provider" ref="beanValidationProvider"/>
</bean>

<bean id="beanValidationProvider" class="org.apache.cxf.validation.BeanValidationProvider">
    <constructor-arg ref="validationProviderResolver"/>
</bean>

<bean id="validationProviderResolver" class="org.example.HibernateValidationProviderResolver"/>
Copy to Clipboard Toggle word wrap

有关 HibernateValidationProviderResolver 类的示例实现,请参阅 “HibernateValidationProviderResolver 类示例”一节。只需要在 OSGi 环境(Apache Karaf)环境中配置 beanValidationProvider

配置 BeanValidationProvider

org.apache.cxf.validation.BeanValidationProvider 是一个简单打包程序类,用于包装 Bean 验证实施(验证供应商)。通过覆盖默认的 BeanValidationProvider 类,您可以自定义 bean 验证的实现。BeanValidationProvider bean 允许您覆盖以下一个或多个提供程序类:

javax.validation.ParameterNameProvider
为方法和构造器参数提供名称。请注意,这个类是必需的,因为 Java 反映的 API 不提供 方法参数或构造器参数的名称。
javax.validation.spi.ValidationProvider<T>
提供指定类型 T 的 Bean 验证实施。通过实施自己的 ValidationProvider 类,您可以为您自己的类定义自定义验证规则。这种机制有效允许您扩展 bean 验证框架。
javax.validation.ValidationProviderResolver
实施用于发现 ValidationProvider 类的机制,并返回发现的类列表。默认解析器会在 classpath 中查找 META-INF/services/javax.validation.spi.ValidationProvider 文件,它应包含 ValidationProvider 类列表。
javax.validation.ValidatorFactory
返回 javax.validation.Validator 实例的工厂。
org.apache.cxf.validation.ValidationConfiguration
CXF 打包程序类可让您覆盖验证供应商层中的更多类。

要自定义 BeanValidationProvider,请将自定义 BeanValidationProvider 实例传递到验证参与拦截器的构造器,并传递给验证传出拦截器的构造器。 例如:

<bean id="validationProvider" class="org.apache.cxf.validation.BeanValidationProvider" />

<bean id="validationInInterceptor" class="org.apache.cxf.validation.BeanValidationInInterceptor">
    <property name="provider" ref="validationProvider" />
</bean>

<bean id="validationOutInterceptor" class="org.apache.cxf.validation.BeanValidationOutInterceptor">
    <property name="provider" ref="validationProvider" />
</bean>
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat