【问题标题】:ClassCastException while using Hibernate Bean Validation使用 Hibernate Bean 验证时出现 ClassCastException
【发布时间】:2014-11-28 14:41:38
【问题描述】:

这是我在这里的第一个问题,所以请多多包涵:)

我正在尝试实施一个框架,通过使用 bean 验证来评估系统的数据质量。我的系统使用 JBoss 7.1.1 和 Hibernate 5.1.3。作为第一步,我想输出一些简单的验证统计信息,例如每种约束类型的违规百分比。为此,我想首先获取我在每个实体中声明的所有约束注释(目前我只有类级别和字段约束)。我想我已经找到了一种方法,方法是将我的 ConstraintDescriptors 强制转换为 ConstraintDescriptorImpl,然后在其上调用 getAnnotationType() 方法(可能有一种更优雅的方法来做我想做的事情,但这可能属于另一个问题)。这一切都编译得很好,但在运行时我得到以下异常:

java.lang.ClassCastException: org.hibernate.validator.metadata.ConstraintDescriptorImpl cannot be cast to org.hibernate.validator.internal.metadata.descriptor.ConstraintDescriptorImpl

这里发生了什么? ConstraintDescriptorImpl 在 hibernate-validator-5.1.3 JAR 中的位置是 org.hibernate.validator.internal.metadata.descriptor.ConstraintDescriptorImpl,我在导入时使用了它。经过一番谷歌搜索,我发现 org.hibernate.validator.metadata.ConstraintDescriptorImpl 是 hibernate-validator-4.x 中类的位置。事实上,我尝试在我的路径上添加 hibernate-validator-4.1.0 JAR,整个事情运行顺利。但这似乎没有回答我的问题(我想使用 5.1.3 版本)。

由于我没有在项目的其他任何地方使用 hibernate-validator-4.x,我怀疑 JBoss 在其模块中包含 hibernate-validator-4.2 可能是罪魁祸首。但话又说回来,它可能是一个 Hibernate 验证器问题。无论如何,我不知道如何解决甚至调试问题 - 任何帮助将不胜感激!

谢谢:)

【问题讨论】:

    标签: java jboss bean-validation classcastexception


    【解决方案1】:

    您的假设是正确的,JBoss AS 7 确实在其模块目录中捆绑了 Hibernate Validator 4。准确地说,Hibernate Validator 4.2.0.Final 位于 modules/org/hibernate/validator/main 中。 AS 7 使用 Hibernate Validator 来满足 EE 6 规范的 Bean Validation 要求(Hibernate Validator 4 是 Bean Valdition 1.0 的参考实现)。

    如果您想将不同版本的 Validator 与您的 AS 7 应用程序捆绑在一起,您需要使用 jboss-deployment-structure.xml 来排除验证模块。另见https://docs.jboss.org/author/display/AS7/Class+Loading+in+AS7

    【讨论】:

    • 感谢您的回答!我曾尝试按照here 的解释来执行您的建议,但不知何故失败了(仍然有同样的例外),所以我希望它会是别的东西。此外,我希望找到一个不需要接触 JBoss 及其模块的解决方案(我应该保持原样)。你知道是否有办法让我的代码通过属性或清单文件在其库中选择 JAR 而不是 JBoss 模块(即不会弄乱 JBoss 模块和文件)?
    • jboss-deployment-structure.xml 是如果你不想直接弄乱模块,你应该使用的文件。如果您尝试过但没有成功,那么如果没有其他信息,就很难判断出了什么问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 2012-09-15
    • 1970-01-01
    相关资源
    最近更新 更多