2012-03-20 68 views
4

我使用GWT中的應用javax.validation * 我添加的依賴到我的POM:在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] 在

任何想法?

+0

call mvn help:effective-pom並檢查驗證API是否在。 – 2012-03-20 14:09:04

回答

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驗證。

要驗證註釋對象,應該使用提供的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的簡單功能 - 特別是可空和NOTNULL,並沒有使用完整的驗證機制。這仍然是正確的方法(使用休眠驗證器)? 而且 - 我想我不知道這些驗證究竟是如何工作的 - 我會得到編譯錯誤?運行時錯誤?我應該明確調用一些驗證器...? – 2012-03-21 09:08:49

+1

我要離開這裏了這一點:http://code.google.com/p/gwt-validation/。但是,嚴肅地說,任何工具包都可以工作。驗證引擎的工作原理是掃描給定類上的註釋,然後使用它在引擎中運行。在這裏看到了同樣的驗證代碼:http://code.google.com/p/gwt-validation/wiki/GWT_Validation_2_0應該讓你在正確的道路上。我已更新我的帖子以包含源代碼示例。 – 2012-03-21 12:31:26

1

您必須添加一個jar,並使用驗證實現,例如hibernate-validation。

相關問題