65.3. 빈 빈 유효성 검사 구성

65.3.1. JAX-WS 구성

65.3.1.1. 개요

이 섹션에서는 Blueprint XML 또는 Spring XML에서 정의된 JAX-WS 서비스 끝점에서 빈 유효성 검사를 활성화하는 방법을 설명합니다. 빈 유효성 검사를 수행하는 데 사용되는 인터셉터는 JAX-WS 끝점과 JAX-RS 1.1 끝점에 모두 일반적입니다(JAX-RS 2.0 엔드포인트는 다른 인터셉터 클래스를 사용합니다.

65.3.1.2. 네임스페이스

이 섹션에 표시된 XML 예제에서는 다음 표에 표시된 것처럼 jaxws 네임스페이스 접두사를 Blueprint 또는 Spring의 적절한 네임스페이스에 매핑해야 합니다.

XML 언어네임스페이스

Blueprint

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

Spring

http://cxf.apache.org/jaxws

65.3.1.3. 빈 유효성 검사 기능

JAX-WS 끝점에서 빈 유효성 검사를 활성화하는 가장 간단한 방법은 빈 유효성 검사 기능을 엔드포인트에 추가하는 것 입니다. 빈 유효성 검사 기능은 다음 클래스에서 구현됩니다.

org.apache.cxf.validation.BeanValidationFeature
이 기능 클래스의 인스턴스를 JAX-WS 끝점에 추가하여(Java API를 통해 또는 Jaxws:features:features의 jaxws:features 하위 요소 XML에서 jaxws:endpoint 를 통해) 끝점에서 빈 유효성 검사를 활성화할 수 있습니다. 이 기능은 들어오는 메시지 데이터를 확인하는 In 인터셉터와 반환 값을 검증하는 Out 인터셉터(기본 구성 매개 변수를 사용하여 인터셉터가 생성된 위치)를 설치합니다.

65.3.1.4. 빈 유효성 검사 기능을 사용한 샘플 JAX-WS 구성

다음 XML 예제에서는 commonValidationFeature bean을 JAX-WS 기능으로 추가하여 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"/>

HibernateValidationProviderResolver 클래스의 샘플 구현은 “HibernateValidationProviderResolver 클래스의 예” 을 참조하십시오. OSGi 환경(Apache Karaf)의 컨텍스트에서 beanValidationProvider 를 구성하는 데만 필요합니다.

참고

컨텍스트에 따라 jaxws 접두사를 Blueprint 또는 Spring의 적절한 XML 네임스페이스에 매핑해야 합니다.

65.3.1.5. 일반적인 빈 유효성 검사 1.1 인터셉터

빈 유효성 검사 구성을 보다 세밀하게 제어하려면 빈 검증 기능을 사용하는 대신 인터셉터를 개별적으로 설치할 수 있습니다. 빈 유효성 검사 기능 대신 다음 인터셉터 중 하나 또는 둘 다를 구성할 수 있습니다.

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 하위 요소)를 통해 엔드포인트에 추가합니다.

65.3.1.6. 빈 유효성 검사 인터셉터를 사용한 샘플 JAX-WS 구성

다음 XML 예제에서는 관련 In 인터셉터 빈 및 Out 인터셉터 빈을 엔드포인트에 명시적으로 추가하여 JAX-WS 끝점에서 빈 유효성 검사 기능을 활성화하는 방법을 보여줍니다.

<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"/>

HibernateValidationProviderResolver 클래스의 샘플 구현은 “HibernateValidationProviderResolver 클래스의 예” 을 참조하십시오. OSGi 환경(Apache Karaf)의 컨텍스트에서 beanValidationProvider 를 구성하는 데만 필요합니다.

65.3.1.7. BeanValidationProvider 구성

org.apache.cxf.validation.BeanValidationProvider 는 빈 유효성 검사 구현( 검증공급자)을 래핑하는 간단한 래퍼 클래스입니다. 기본 BeanValidationProvider 클래스를 재정의하여 빈 유효성 검사 구현을 사용자 지정할 수 있습니다. BeanValidationProvider 빈을 사용하면 다음 공급자 클래스 중 하나 이상을 덮어쓸 수 있습니다.

javax.validation.ParameterNameProvider
메서드 및 생성자 매개 변수의 이름을 제공합니다.Provides names for method and constructor parameters. Java 리플렉션 API에서 메서드 매개 변수 또는 생성자 매개 변수의 이름에 대한 액세스 권한을 부여 하지 않으므로 이 클래스가 필요합니다.
javax.validation.spi.ValidationProvider<T>
지정된 유형인 T 에 대한 빈 유효성 검사를 구현합니다. 고유한 ValidationProvider 클래스를 구현하면 고유한 클래스에 대한 사용자 지정 검증 규칙을 정의할 수 있습니다. 이 메커니즘을 효과적으로 사용하면 빈 검증 프레임워크를 확장할 수 있습니다.
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 인스턴스를 검증 In 인터셉터의 생성자에 전달하고 검증 아웃 인터셉터 생성자에 전달합니다. 예를 들면 다음과 같습니다.

<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>

65.3.2. JAX-RS 구성

65.3.2.1. 개요

이 섹션에서는 Blueprint XML 또는 Spring XML에서 정의된 JAX-RS 서비스 끝점에서 빈 유효성 검사를 활성화하는 방법을 설명합니다. 빈 유효성 검사를 수행하는 데 사용되는 인터셉터는 JAX-WS 끝점과 JAX-RS 1.1 끝점에 모두 일반적입니다(JAX-RS 2.0 엔드포인트는 다른 인터셉터 클래스를 사용합니다.

65.3.2.2. 네임스페이스

이 섹션에 표시된 XML 예제에서는 다음 표에 표시된 것처럼 jaxws 네임스페이스 접두사를 Blueprint 또는 Spring의 적절한 네임스페이스에 매핑해야 합니다.

XML 언어네임스페이스

Blueprint

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

Spring

http://cxf.apache.org/jaxws

65.3.2.3. 빈 유효성 검사 기능

JAX-RS 끝점에서 빈 유효성 검사를 활성화하는 가장 간단한 방법은 빈 유효성 검사 기능을 엔드포인트에 추가하는 것 입니다. 빈 유효성 검사 기능은 다음 클래스에서 구현됩니다.

org.apache.cxf.validation.BeanValidationFeature
이 기능 클래스의 인스턴스를 JAX-RS 끝점에 추가하여(Java API를 통해 또는 jaxrs:features 하위 요소 XML에서 jaxrs:server 를 통해) 엔드포인트에서 빈 유효성 검사를 활성화할 수 있습니다. 이 기능은 들어오는 메시지 데이터를 확인하는 In 인터셉터와 반환 값을 검증하는 Out 인터셉터(기본 구성 매개 변수를 사용하여 인터셉터가 생성된 위치)를 설치합니다.

65.3.2.4. 검증 예외 매퍼

또한 JAX-RS 엔드포인트를 사용하려면 유효성 검사 예외를 HTTP 오류 응답에 매핑해야 하는 유효성 검사 예외 매퍼 를 구성해야 합니다. 다음 클래스는 JAX-RS에 대한 유효성 검사 예외 매핑을 구현합니다.

org.apache.cxf.jaxrs.validation.ValidationExceptionMapper
JAX-RS 2.0 사양에 따라 검증 예외 매핑을 구현합니다. 모든 입력 매개변수 유효성 검증 위반은 HTTP 상태 코드 400 Bad Request 에 매핑되고 모든 반환 값 유효성 검사 위반(또는 내부 검증 위반)은 HTTP 상태 코드 500 Internal Server Error 에 매핑됩니다.

65.3.2.5. 샘플 JAX-RS 구성

다음 XML 예제에서는 commonValidationFeature bean을 JAX-RS 기능으로 추가하고 exceptionMapper 빈을 JAX-RS 공급자로 추가하여 JAX-RS 엔드포인트에서 빈 유효성 검사 기능을 활성화하는 방법을 보여줍니다.

<jaxrs:server address="/bwrest">
    <jaxrs:serviceBeans>
        <ref bean="bookWorldValidation"/>
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <ref bean="exceptionMapper"/>
    </jaxrs:providers>
    <jaxrs:features>
        <ref bean="commonValidationFeature" />
    </jaxrs:features>
</jaxrs:server>

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

<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"/>

HibernateValidationProviderResolver 클래스의 샘플 구현은 “HibernateValidationProviderResolver 클래스의 예” 을 참조하십시오. OSGi 환경(Apache Karaf)의 컨텍스트에서 beanValidationProvider 를 구성하는 데만 필요합니다.

참고

컨텍스트에 따라 jaxrs 접두사를 Blueprint 또는 Spring의 적절한 XML 네임스페이스에 매핑해야 합니다.

65.3.2.6. 일반적인 빈 유효성 검사 1.1 인터셉터

빈 유효성 검사 기능을 사용하는 대신 빈 유효성 검사 인터셉터를 설치하여 검증 구현을 보다 세밀하게 제어할 수 있습니다. JAX-RS는 이를 위해 JAX-WS와 동일한 인터셉터를 사용합니다. “일반적인 빈 유효성 검사 1.1 인터셉터”

65.3.2.7. 빈 유효성 검사 인터셉터를 사용한 샘플 JAX-RS 구성

다음 XML 예제에서는 관련 In 인터셉터 빈 및 Out 인터셉터 빈을 서버 엔드포인트에 명시적으로 추가하여 JAX-RS 엔드포인트에서 빈 유효성 검사 기능을 활성화하는 방법을 보여줍니다.

<jaxrs:server address="/">
    <jaxrs:inInterceptors>
        <ref bean="validationInInterceptor" />
    </jaxrs:inInterceptors>

    <jaxrs:outInterceptors>
        <ref bean="validationOutInterceptor" />
    </jaxrs:outInterceptors>

    <jaxrs:serviceBeans>
    ...
    </jaxrs:serviceBeans>

    <jaxrs:providers>
        <ref bean="exceptionMapper"/>
    </jaxrs:providers>
</jaxrs:server>

<bean id="exceptionMapper" class="org.apache.cxf.jaxrs.validation.ValidationExceptionMapper"/>

<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"/>

HibernateValidationProviderResolver 클래스의 샘플 구현은 “HibernateValidationProviderResolver 클래스의 예” 을 참조하십시오. OSGi 환경(Apache Karaf)의 컨텍스트에서 beanValidationProvider 를 구성하는 데만 필요합니다.

65.3.2.8. BeanValidationProvider 구성

“BeanValidationProvider 구성” 에 설명된 대로 사용자 정의 BeanValidationProvider 인스턴스를 검증 인터셉터에 삽입할 수 있습니다.

65.3.3. JAX-RS 2.0 구성

65.3.3.1. 개요

JAX-RS 1.1(Aust-WS와 공통 검증 인터셉터를 공유함)과 달리 JAX-RS 2.0 구성은 JAX-RS 2.0에 고유한 전용 검증 인터셉터 클래스에 의존합니다.

65.3.3.2. 빈 유효성 검사 기능

JAX-RS 2.0의 경우 다음 클래스에서 구현되는 전용 빈 유효성 검사 기능이 있습니다.

org.apache.cxf.validation.JAXRSBeanValidationFeature
JAX-RS 엔드포인트(Java API를 통해 또는 XML에서 jaxrs:serverjaxrs:features 하위 요소)에 이 기능의 인스턴스를 추가하면 JAX-RS 2.0 서버 끝점에서 빈 유효성 검사를 활성화할 수 있습니다. 이 기능은 들어오는 메시지 데이터를 확인하는 In 인터셉터와 반환 값을 검증하는 Out 인터셉터(기본 구성 매개 변수를 사용하여 인터셉터가 생성된 위치)를 설치합니다.

65.3.3.3. 검증 예외 매퍼

JAX-RS 2.0은 JAX-RS 1.x와 동일한 검증 예외 매퍼 클래스를 사용합니다.

org.apache.cxf.jaxrs.validation.ValidationExceptionMapper
JAX-RS 2.0 사양에 따라 검증 예외 매핑을 구현합니다. 모든 입력 매개변수 유효성 검증 위반은 HTTP 상태 코드 400 Bad Request 에 매핑되고 모든 반환 값 유효성 검사 위반(또는 내부 검증 위반)은 HTTP 상태 코드 500 Internal Server Error 에 매핑됩니다.

65.3.3.4. 빈 유효성 검사 호출기

기본이 아닌 라이프사이클 정책(예: Spring 라이프사이클 관리 사용)을 사용하여 JAX-RS 서비스를 구성하는 경우(예: Spring 라이프사이클 관리 사용) org.apache.cxf.jaxrs.validation.JAXRSBeanValidation callr 인스턴스를 등록해야 하며, 엔드포인트 구성에서 jaxrs:invoker 요소를 사용하여 빈이 올바르게 호출되도록 해야 합니다.

JAX-RS 서비스 라이프사이클 관리에 대한 자세한 내용은 “Spring XML의 라이프사이클 관리” 을 참조하십시오.

65.3.3.5. 빈 유효성 검사 기능을 사용한 샘플 JAX-RS 2.0 구성

다음 XML 예제에서는 jaxrsValidationFeature bean을 JAX-RS 기능으로 추가하고 exceptionMapper 빈을 JAX-RS 공급자로 추가하여 JAX-RS 2.0 끝점에서 빈 유효성 검사 기능을 활성화하는 방법을 보여줍니다.

<jaxrs:server address="/">
    <jaxrs:serviceBeans>
    ...
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <ref bean="exceptionMapper"/>
    </jaxrs:providers>
    <jaxrs:features>
        <ref bean="jaxrsValidationFeature" />
    </jaxrs:features>
</jaxrs:server>

<bean id="exceptionMapper" class="org.apache.cxf.jaxrs.validation.ValidationExceptionMapper"/>
<bean id="jaxrsValidationFeature" class="org.apache.cxf.validation.JAXRSBeanValidationFeature">
    <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"/>

HibernateValidationProviderResolver 클래스의 샘플 구현은 “HibernateValidationProviderResolver 클래스의 예” 을 참조하십시오. OSGi 환경(Apache Karaf)의 컨텍스트에서 beanValidationProvider 를 구성하는 데만 필요합니다.

참고

컨텍스트에 따라 jaxrs 접두사를 Blueprint 또는 Spring의 적절한 XML 네임스페이스에 매핑해야 합니다.

65.3.3.6. 일반적인 빈 유효성 검사 1.1 인터셉터

빈 유효성 검사의 구성을 보다 세밀하게 제어하려면 빈 유효성 검사 기능을 사용하는 대신 JAX-RS 인터셉터를 개별적으로 설치할 수 있습니다. 다음 JAX-RS 인터셉터 중 하나 또는 둘 다를 구성합니다.

org.apache.cxf.validation.JAXRSBeanValidationInInterceptor
JAX-RS 2.0 서버 끝점에 설치할 때 유효성 검사 제약 조건에 대해 리소스 메서드 매개 변수의 유효성을 검증합니다. 유효성 검사가 실패하면 javax.validation.ConstraintViolationException 예외를 발생시킵니다. 이 인터셉터를 설치하려면 XML의 jaxrs:inInterceptors 하위 요소를 통해 엔드포인트에 추가합니다.
org.apache.cxf.validation.JAXRSBeanValidationOutInterceptor
JAX-RS 2.0 끝점에 설치되는 경우 유효성 검사 제약 조건에 따라 응답 값을 검증합니다. 유효성 검사가 실패하면 javax.validation.ConstraintViolationException 예외를 발생시킵니다. 이 인터셉터를 설치하려면 XML의 jaxrs:inInterceptors 하위 요소를 통해 엔드포인트에 추가합니다.

65.3.3.7. 빈 유효성 검사 인터셉터를 사용한 샘플 JAX-RS 2.0 구성

다음 XML 예제에서는 관련 In 인터셉터 빈 및 Out 인터셉터 빈을 서버 엔드포인트에 명시적으로 추가하여 JAX-RS 2.0 끝점에서 빈 유효성 검사 기능을 활성화하는 방법을 보여줍니다.

<jaxrs:server address="/">
    <jaxrs:inInterceptors>
        <ref bean="validationInInterceptor" />
    </jaxrs:inInterceptors>

    <jaxrs:outInterceptors>
        <ref bean="validationOutInterceptor" />
    </jaxrs:outInterceptors>

    <jaxrs:serviceBeans>
    ...
    </jaxrs:serviceBeans>

    <jaxrs:providers>
        <ref bean="exceptionMapper"/>
    </jaxrs:providers>
</jaxrs:server>

<bean id="exceptionMapper" class="org.apache.cxf.jaxrs.validation.ValidationExceptionMapper"/>

<bean id="validationInInterceptor" class="org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInInterceptor">
    <property name="provider" ref="beanValidationProvider" />
</bean>

<bean id="validationOutInterceptor" class="org.apache.cxf.jaxrs.validation.JAXRSBeanValidationOutInterceptor">
    <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"/>

HibernateValidationProviderResolver 클래스의 샘플 구현은 “HibernateValidationProviderResolver 클래스의 예” 을 참조하십시오. OSGi 환경(Apache Karaf)의 컨텍스트에서 beanValidationProvider 를 구성하는 데만 필요합니다.

65.3.3.8. BeanValidationProvider 구성

“BeanValidationProvider 구성” 에 설명된 대로 사용자 정의 BeanValidationProvider 인스턴스를 검증 인터셉터에 삽입할 수 있습니다.

65.3.3.9. JAXRSParameterNameProvider 구성

org.apache.cxf.jaxrs.validation.JAXRSParameterNameProvider 클래스는 JAX-RS 2.0 엔드포인트 컨텍스트에서 메서드 및 생성자 매개변수 이름을 제공하는 데 사용할 수 있는 javax.validation.ParameterNameProvider 인터페이스의 구현입니다.