검색

65장. Cryostat 유효성 검사

download PDF

초록

Cryostat 유효성 검사는 서비스 클래스 또는 인터페이스에 Java 주석을 추가하여 런타임 제약 조건을 정의할 수 있는 Java 표준입니다. Apache CXF는 인터셉터를 사용하여 이 기능을 웹 서비스 메서드 호출과 통합합니다.

65.1. 소개

65.1.1. 개요

Cryostat 유효성 검사 1.1(#159-349) - 원래의 Cryostat 유효성 검사 1.0(JSR-303) 표준의 진화로, Java 주석을 사용하여 런타임에 확인할 수 있는 제약 조건을 선언할 수 있습니다.https://jcp.org/en/jsr/detail?id=349 주석을 사용하여 Java 코드의 다음 부분에 제약 조건을 정의할 수 있습니다.

  • 8080 클래스의 필드입니다.
  • 메서드 및 생성자 매개변수입니다.
  • 메서드 반환 값을 반환합니다.

65.1.2. 주석이 달린 클래스의 예

다음 예제에서는 몇 가지 표준VLAN 검증 제약 조건을 사용하여 주석이 달린 Java 클래스를 보여줍니다.

// Java
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Max;
import javax.validation.Valid;
...
public class Person {
    @NotNull private String firstName;
    @NotNull private String lastName;
    @Valid @NotNull private Person boss;

    public @NotNull String saveItem( @Valid @NotNull Person person, @Max( 23 ) BigDecimal age ) {
        // ...
    }
}

65.1.3. Cryostat 검증 또는 스키마 검증?

빈 유효성 검사 및 스키마 유효성 검사는 매우 유사합니다. XML 스키마를 사용하여 끝점을 구성하는 것은 웹 서비스 끝점에서 런타임에 메시지의 유효성을 검사하는 잘 설정된 방법입니다. XML 스키마는 들어오고 나가는 메시지에 대한VLAN 검증과 동일한 제약 조건의 많은 부분을 확인할 수 있습니다. 그러나 polkit 유효성 검사는 다음 이유 중 하나 이상에 유용한 대체 방법이 될 수 있습니다.

  • Cryostat 유효성 검사를 사용하면 XML 스키마(예: 코드 우선 서비스 개발의 경우)와 독립적으로 제약 조건을 정의할 수 있습니다.
  • 현재 XML 스키마가 너무 lax인 경우 Cryostat 유효성 검사를 사용하여 더 엄격한 제약 조건을 정의할 수 있습니다.
  • Cryostat 유효성 검사를 사용하면 사용자 지정 제약 조건을 정의할 수 있으며 XML 스키마 언어를 사용하여 정의할 수 없습니다.

65.1.4. 종속 항목

Cryostat Validation 1.1(JSR-349) 표준은 구현이 아닌 API만 정의합니다. 따라서 종속성은 다음 두 부분으로 제공되어야 합니다.

  • 핵심 종속성-VLAN 검증 1.1 API, Java 통합 표현식 언어 API 및 구현을 제공합니다.
  • Hibernate Validator 종속 항목-VLAN 검증 1.1 구현을 제공합니다.

65.1.5. 핵심 종속 항목

Cryostat 검증을 사용하려면 프로젝트의 Maven pom.xml 파일에 다음 코어 종속 항목을 추가해야 합니다.

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <!-- use 3.0-b02 version for Java 6 -->
    <version>3.0.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.el</artifactId>
    <!-- use 3.0-b01 version for Java 6 -->
    <version>3.0.0</version>
</dependency>
참고

javax.el/javax.el-apiorg.glassfish/javax.el 종속 항목은 Java 통합 표현식 언어의 API 및 구현을 제공합니다. 이 표현식 언어는 8080 유효성 검사에 의해 내부적으로 사용되지만 애플리케이션 프로그래밍 수준에서는 중요하지 않습니다.

65.1.6. Hibernate Validator 종속 항목

8080 검증의 Hibernate Validator 구현을 사용하려면 프로젝트의 Maven pom.xml 파일에 다음과 같은 종속 항목을 추가해야 합니다.

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.0.3.Final</version>
</dependency>

65.1.7. OSGi 환경에서 검증 공급자 해결

검증 공급자를 해결하기 위한 기본 메커니즘에는 공급자 리소스를 찾기 위해 classpath를 스캔해야 합니다. 그러나 OSGi(Apache Karaf) 환경의 경우 유효성 검사 공급자(예: Hibernate 유효성 검사기)가 별도의 번들로 패키지되어 애플리케이션 classpath에서 자동으로 제공되지 않기 때문에 이 메커니즘은 작동하지 않습니다. OSGi의 컨텍스트에서 Hibernate 검증기를 애플리케이션 번들에 연결해야 하며 OSGi는 이를 성공적으로 수행하려면 약간의 도움이 필요합니다.

65.1.8. OSGi에서 명시적으로 검증 공급자 구성

OSGi의 컨텍스트에서 자동 검색을 사용하는 대신 검증 공급자를 명시적으로 구성해야 합니다. 예를 들어 공통 검증 기능( “Cryostat 검증 기능”참조)을 사용하여 빈 유효성 검사를 활성화하는 경우 다음과 같이 검증 공급자를 사용하여 구성해야 합니다.

<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 는 Hibernate 검증 공급자를 래핑하는 사용자 지정 클래스입니다.

65.1.9. HibernateValidationProviderResolver 클래스의 예

다음 코드 예제에서는 Hibernate 유효성 검사기를 확인하는 사용자 정의 HibernateValidationProviderResolver 를 정의하는 방법을 보여줍니다.

// Java
package org.example;

import static java.util.Collections.singletonList;
import org.hibernate.validator.HibernateValidator;
import javax.validation.ValidationProviderResolver;
import java.util.List;

/**
 * OSGi-friendly implementation of {@code javax.validation.ValidationProviderResolver} returning
 * {@code org.hibernate.validator.HibernateValidator} instance.
 *
 */
public class HibernateValidationProviderResolver implements ValidationProviderResolver {

    @Override
    public List getValidationProviders() {
        return singletonList(new HibernateValidator());
    }
}

Maven 번들 플러그인을 사용하도록 구성된 Maven 빌드 시스템에서 이전 클래스를 빌드하면 애플리케이션이 배포 시 Hibernate 유효성 검사기 번들에 연결됩니다( 이미 Hibernate 검증기 번들을 OSGi 컨테이너에 배포했다고 가정).

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.