在GWT中使用javax.validation会引发运行时错误ClassNotFoundException

在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

我在GWT应用程序中使用javax.validation* 我将依赖项添加到我的pom中:

<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验证器)?此外——我想我不确定这些验证究竟是如何工作的——我会得到编译错误吗?运行时错误?我是否应该显式调用某个验证器…?我将把它留在这里:。但是,说真的,这两种工具包都会起作用。验证引擎的工作原理是扫描给定类上的注释,然后使用该注释在引擎中运行。这里看到的验证代码相同:应该会让您走上正确的道路。我已经更新了我的帖子,加入了源代码示例。