在GWT中使用javax.validation会引发运行时错误ClassNotFoundException
我在GWT应用程序中使用javax.validation* 我将依赖项添加到我的pom中:在GWT中使用javax.validation会引发运行时错误ClassNotFoundException,java,validation,gwt,Java,Validation,Gwt,我在GWT应用程序中使用javax.validation* 我将依赖项添加到我的pom中: <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.0.0.GA</version> </dependency> javax.valid
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
javax.validation
验证api
1.0.0.GA
但在运行时,我得到了ClassNotFoundException:
2012-03-20 09:46:12253警告[pool-2-thread-1]o.s.c.t.c.AnnotationAttributesReadingVisitor[AnnotationAttributesReadingVisitor.java:91]在读取注释元数据时未能对类型进行类加载。这是一个非致命错误,但某些注释元数据可能不可用。
java.lang.ClassNotFoundException:javax.validation.constraints.NotNull
在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1701)~[catalina.jar:7.0.26]
在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)~[catalina.jar:7.0.26]
在
有什么想法吗?您必须在验证实现中添加一个jar,比如我们的hibernate验证。要使验证框架正常工作,实际上需要做几件事 您需要验证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>
javax.validation
验证api
1.0.0.GA
罐子
来源
javax.validation
验证api
1.0.0.GA
罐子
如果不这样做,您将得到验证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>
此外,还需要包括某种验证引擎。如果遵循GWTBean验证指南,可能需要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;
import javax.validation.validation;
导入javax.validation.Validator;
导入javax.validation.ValidatorFactory;
导入javax.validation.ConstraintViolation;
/* ... 剪断*/
//使用验证库的默认引导机制获取验证程序工厂
ValidatorFactory=Validation.byDefaultProvider().configure().buildValidatorFactory();
//获取一个验证器实例
Validator Validator=factory.getValidator();
//创建新对象
Person=新人();
person.setFirstName(“安德鲁”);
//验证人员对象
设置冲突=验证程序。验证(个人);
//lastName为null时应存在一个冲突
断言冲突。大小()==1;
祝你好运。请致电mvn帮助:有效pom并检查验证api是否在。谢谢!这似乎是正确的方法。但我想知道——我们实际上(目前)只需要javax.validation的简单功能——特别是Nullable和NotNull,还没有使用完整的验证机制。这仍然是正确的方法吗(使用hibernate验证器)?此外——我想我不确定这些验证究竟是如何工作的——我会得到编译错误吗?运行时错误?我是否应该显式调用某个验证器…?我将把它留在这里:。但是,说真的,这两种工具包都会起作用。验证引擎的工作原理是扫描给定类上的注释,然后使用该注释在引擎中运行。这里看到的验证代码相同:应该会让您走上正确的道路。我已经更新了我的帖子,加入了源代码示例。