2012-03-20 11 views
4

をスロー* 私はPOMに依存関係を追加しました:。GWTでjavax.validationを使用すると、私は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:12253がWARN [プール-2-スレッド-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の検証ガイドに従っているなら、おそらくhibernate-validationが必要です。

注釈付きオブジェクトを検証するには、提供されている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

ありがとう!それは正しい方法だと思われる。 しかし私は実際には(今のところ)javax.validationの単純な機能、特にNullableとNotNullだけを望んでおり、完全な検証メカニズムはまだ使用していません。これは正しい方法ですか?(休止状態のバリデータを使用しますか?) さらに、これらの検証がどのくらい正確に機能するかわからないと思いますが、コンパイルエラーが発生しますか?実行時エラー?明示的にいくつかのバリデータを呼び出す必要がありますか? –

+1

私はこれをここに残します:http://code.google.com/p/gwt-validation/。しかし、真剣に、どちらのツールキットも動作します。検証エンジンは、指定されたクラスの注釈をスキャンし、それを使用してエンジンを実行します。同じ検証コードは、http://code.google.com/p/gwt-validation/wiki/GWT_Validation_2_0こちらをご覧ください。私はソースコードの例を含めるために自分の投稿を更新しました。 –

1

私たちのような妥当性検証の実装では、私たちは冬眠の検証を1つ追加する必要があります。

関連する問題