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

标签 java validation gwt

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

<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] o.s.c.t.c.AnnotationAttributesReadingVisitor [AnnotationAttributesReadingVisitor.java:91] 读取注释元数据时无法加载类型。这是一个非 fatal error ,但某些注释元数据可能不可用。 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] 在

有什么想法吗?

最佳答案

要使验证框架正常工作,您实际上需要几样东西。

您需要验证 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;

祝你好运。

关于java - 在 GWT 中使用 javax.validation 会引发运行时错误 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9787182/

相关文章:

java - 删除临时目录

java - fragment 未被删除

java - 在引导类路径中复制 jar 文件不起作用

java - 将前端框架添加到 GWT

java - 如何将 ActionListener 添加到 AWT MenuItem?

xml - 使用模式仅验证部分 XML 文档?

javascript - Angular:在 NgForm 的自定义输入组件中调用 markAsDirty()

java - 我如何在 main(String[] args) 中显示它以及如何在 xml 中连接这些类和/或构造函数?

java - 将 GWT 部署到 JBoss 时出现 web.xml 问题

java - 如何将springsecurity集成到GWT中?