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:server
의jaxrs: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
인터페이스의 구현입니다.