4

我正在尝试使用休眠验证器进行 gwt 验证。我已按照 http://code.google.com/p/google-web-toolkit/wiki/BeanValidation 中的步骤操作,并根据http://code.google.com/p/上的示例验证项目配置了我的项目google-web-toolkit/source/browse/trunk/samples/validation/

我的 .gwt.xml 文件包含:

<inherits name="org.hibernate.validator.HibernateValidator" />

和我的自定义验证工厂:

<replace-with class="my.package.here.client.validation.ValidatorFactory">
<when-type-is class="javax.validation.ValidatorFactory" />
</replace-with>     

在开发模式下,验证在客户端和服务器端都可以完美运行,但是在尝试 gwt 编译时,我得到:

gwtc-production:
     [java] Compiling module my.package.MyModule
     [java]    Validating newly compiled units
     [java]       [ERROR] Errors in 'jar:file:/hibernate-validator-4.2.0.Final-sources.jar!/org/hibernate/validator/constraints/impl/FutureValidatorForReadableInstant.java'
     [java]          [ERROR] Line 32: No source code is available for type org.joda.time.ReadableInstant; did you forget to inherit a required module?
     [java]       [ERROR] Errors in 'jar:file:/hibernate-validator-4.2.0.Final-sources.jar!/org/hibernate/validator/constraints/impl/FutureValidatorForReadablePartial.java'
     [java]          [ERROR] Line 32: No source code is available for type org.joda.time.ReadablePartial; did you forget to inherit a required module?
     [java]       [ERROR] Errors in 'jar:file:/hibernate-validator-4.2.0.Final-sources.jar!/org/hibernate/validator/constraints/impl/PastValidatorForReadableInstant.java'
     [java]       [ERROR] Errors in 'jar:file:/hibernate-validator-4.2.0.Final-sources.jar!/org/hibernate/validator/constraints/impl/SafeHtmlValidator.java'
     [java]          [ERROR] Line 22: The import org.jsoup cannot be resolved
     [java]          [ERROR] Line 23: The import org.jsoup cannot be resolved
     [java]          [ERROR] Line 35: Whitelist cannot be resolved to a type
     [java]          [ERROR] Line 40: Whitelist cannot be resolved to a type
     [java]          [ERROR] Line 40: Whitelist cannot be resolved
     [java]          [ERROR] Line 43: Whitelist cannot be resolved to a type
     [java]          [ERROR] Line 43: Whitelist cannot be resolved
     [java]          [ERROR] Line 46: Whitelist cannot be resolved to a type
     [java]          [ERROR] Line 46: Whitelist cannot be resolved
     [java]          [ERROR] Line 49: Whitelist cannot be resolved to a type
     [java]          [ERROR] Line 49: Whitelist cannot be resolved
     [java]          [ERROR] Line 52: Whitelist cannot be resolved to a type
     [java]          [ERROR] Line 52: Whitelist cannot be resolved
     [java]          [ERROR] Line 55: Whitelist cannot be resolved to a type
     [java]          [ERROR] Line 62: Jsoup cannot be resolved
     [java]          [ERROR] Line 62: Whitelist cannot be resolved to a type
     [java]       [ERROR] Errors in 'jar:file:gwt-user.jar!/org/hibernate/validator/super/org/hibernate/validator/engine/PathImpl.java'
     [java]          [ERROR] Line 72: The constructor NodeImpl(String) is undefined
     [java]          [ERROR] Line 84: The constructor NodeImpl(Path.Node) is undefined
     [java]          [ERROR] Line 95: The constructor NodeImpl(Path.Node) is undefined
     [java]          [ERROR] Line 202: The constructor NodeImpl(String) is undefined
     [java]          [ERROR] Line 204: The method setInIterable(boolean) is undefined for the type NodeImpl
     [java]          [ERROR] Line 209: The method setIndex(Integer) is undefined for the type NodeImpl
     [java]          [ERROR] Line 212: The method setKey(String) is undefined for the type NodeImpl
     [java]    [ERROR] Aborting compile due to errors in some input files

显然我缺少一些源 jar。我的类路径中有(除其他外):

hibernate-validator-4.2.0.Final.jar
hibernate-validator-4.2.0.Final-sources.jar

我也尝试添加joda-time-2.1.jar,joda-time-2.1-sources.jar和.jsoup-1.6.3.jarjsoup-1.6.3-sources.jar

不应该继承 org.hibernate.validator.HibernateValidator 照顾超级来源,所以我不需要提供来源?谁能看到我错过了什么?

4

3 回答 3

7

GWT 是针对 Hibernate Validator 4.1.0-Final 构建的,并且依赖于它的一些内部结构(PathImpl, NodeImpl),显然这些在 Hibernate Validator 4.2.0 中已经发生了变化。

使用 4.1.0-Final(或者可能是示例中的 4.0.2.GA)而不是 4.2.0。


可以在GWT Tracker中跟踪问题,我们可能至少应该明确记录不兼容性。

于 2012-09-12T10:59:20.523 回答
0

我不知道 Hibernate 验证的 GWT 实现。但是为什么 GWT 试图从您的 Hibernate 源 jar 中理解代码?如果它是 GWT 自己的代码,它应该来自它的 gwt-user.jar 或类似的东西。

如果你同意我的观点,那么不要在 GWT 编译类路径中包含任何真正的 Hibernate jar。无论如何,它不需要它/知道它。

于 2012-09-12T10:32:19.277 回答
0

4.1.0 也对我有用,一段时间后我发现更高版本存在一些问题。因此,使用与 gwt 教程中推荐的相同版本(http://www.gwtproject.org/doc/latest/DevGuideValidation.html)我也有一个编译警告:

detected warnings related to 'javax.validation.constraint'. is validation- version .jar on the classpath

我修复了:

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <scope>compile</scope>
</dependency>
于 2014-07-02T13:50:42.453 回答