2

在 App Engine 应用程序运行时,我收到以下异常:

java.lang.ExceptionInInitializerError
at
org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.interpolateExpression(ResourceBundleMessageInterpolator.java:227)

... (removed for brevity)

Caused by: java.lang.ClassNotFoundException: de.odysseus.el.ExpressionFactoryImpl

我在我的开发服务器上看到了这个错误,并通过在我的 pom.xml 中包含 juel-impl 来修复它

当我使用 appcfg.sh 从服务器中提取我的应用程序时,我看到它在 WEB-INF/lib 中包含 juel-impl-2.2.7-20130801.163115-1.jar

我真的不知道该怎么做。

4

2 回答 2

3

更新:根据GAE 问题跟踪器,这已在 1.9.7 版本中修复。对于早期版本,请参见下文。


Hibernate Validator 5.x 使用了统一表达式语言。特别是,它使用静态 API 方法来查找ExpressionFactory. 然而,App Engine 1.9.4 及更早版本中的一个错误似乎阻止了仅在生产中使用任何表达式工厂实现。

在解决此问题之前,有两种解决方法:

  1. 如果您不需要 Bean Validation 1.1 功能,请回退到 Hibernate Validator 4.3.1.Final。我已经成功测试了这一点。

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.3.1.Final</version>
    </dependency>
    
  2. 如果您需要 Bean Validation 1.1,已经有报告使用 Apache BVal 的存储库快照来完成这项工作。我没有测试过这个。


更新说明:如我之前的回复(Glassfish EL 或 JUEL)中所述,指定表达式语言实现在开发和某些生产用例中都可以正常工作,但在某些验证中仍然会失败。

于 2013-11-06T14:06:59.493 回答
0

我有同样的问题。它有助于使用 hibernate-validator 4.3.1.Final 而不是 5.0.1.Final。参考:stackoverflow(avidD-s 答案)

于 2013-12-17T11:00:05.660 回答