2012-03-20 6 views
4

내가 GWT 응용 프로그램에서 javax.validation을 사용하고 던졌습니다 * 내 치어에 종속성을 추가했습니다.런타임 오류 ClassNotFoundException가

<dependency> 
    <groupId>javax.validation</groupId> 
    <artifactId>validation-api</artifactId> 
    <version>1.0.0.GA</version> 
</dependency> 

그러나 런타임에 내가 ClassNotFoundException가 받고 있어요 :

2012-03-20 09 : 46 : 12,253 WARN [pool-2-thread-1] osctcAnnotationAttributesReadingVisitor [AnnotationAttributesReadingVisitor.java:91] 주석 메타 데이터를 읽는 동안 형식을 클래스로로드하지 못했습니다. 이것은 치명적이지 않은 오류이지만 특정 주석 메타 데이터를 사용할 수 없습니다. java.lang.ClassNotFoundException : javax.validation.constraints.NotNull at org.apache.catalina.loader.WebappClassLoader.loadClass (WebappClassLoader.java:1701) ~ [catalina.jar : 7.0.26] at org.apache. catalina.loader.WebappClassLoader.loadClass (WebappClassLoader.java:1546) ~ [catalina.jar : 7.0.26] at

아이디어가 있으십니까?

+0

mvn help : effective-pom을 호출하고 validation-api가 있는지 확인하십시오. –

답변

7

실제로 유효성 검사 프레임 워크가 작동하는 데 필요한 몇 가지 사항이 있습니다.

유효성 검사 API가 필요합니다. 처럼 보이지만 GWT는 소스이 필요합니다.

이 기능을 사용하려면 API jar 및 API 소스를 모두 포함해야합니다.

<dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <version>1.0.0.GA</version> 
     <type>jar</type> 
     <classifier>sources</classifier> 
</dependency> 
<dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <version>1.0.0.GA</version> 
     <type>jar</type> 
</dependency> 

유효성 검사 API에 대해 클래스를 찾을 수없는 예외가 발생합니다.

또한 GWT 모듈 XML에 유효성 검사 포함을 추가했는지 확인해야합니다.

<inherits name="org.hibernate.validator.HibernateValidator" /> 
<replace-with 
    class="com.google.gwt.sample.validation.client.SampleValidatorFactory"> 
    <when-type-is class="javax.validation.ValidatorFactory" /> 
</replace-with> 

또한, 일종의 유효성 검사 엔진도 포함시켜야합니다. GWT bean 유효성 검사 가이드를 따르고 있다면 아마 최대 절전 모드 검증을 원할 것이다.

주석이 달린 개체의 유효성을 검사하려면 제공된 API를 사용해야합니다.

import javax.validation.Validation; 
import javax.validation.Validator; 
import javax.validation.ValidatorFactory; 
import javax.validation.ConstraintViolation; 

/* ... snip ... */ 

//get validator factory using default bootstrap mechanism of the Validation library 
ValidatorFactory factory = Validation.byDefaultProvider().configure().buildValidatorFactory(); 

//get a validator instance 
Validator validator = factory.getValidator(); 

//create new object 
Person person = new Person(); 
person.setFirstName("Andrew"); 

//validate person object 
Set<ConstraintViolation<Person>> violations = validator.validate(person); 

//should be one violation from lastName being null 
assert violations.size() == 1; 

행운을 빈다.

+0

감사합니다! 그것은 옳은 길 같습니다. 하지만 사실은 (현재는) Nullable 및 NotNull과 같은 javax.validation의 단순한 기능 만 필요하지만 아직 전체 유효성 검사 메커니즘을 사용하지는 않습니다. 여전히 올바른 방법입니까 (최대 절전 유효성 검사기 사용)? 또한 -이 유효성 검사가 얼마나 정확하게 작동하는지 확신 할 수 없다고 생각합니다. 컴파일 오류가 발생합니까? 런타임 오류? 명시 적으로 일부 유효성 검사기를 호출해야합니까? –

+1

여기에 남겨 두겠습니다 : http://code.google.com/p/gwt-validation/. 그러나 진지하게도 어느 툴킷이든 작동 할 것입니다. 유효성 검사 엔진은 주어진 클래스의 주석을 스캔 한 다음이를 사용하여 엔진을 실행합니다. 동일한 유효성 검사 코드 (http://code.google.com/p/gwt-validation/wiki/GWT_Validation_2_0)가 올바른 길을 찾아줍니다. 내 게시물을 소스 코드 예제를 포함하도록 업데이트했습니다. –

1

우리는 최대 절전 모드 유효성 검사와 같은 유효성 검사 구현과 함께 하나의 jar를 추가해야합니다.