在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
我真的不知道该怎么做。
最佳答案
更新:根据GAE issue tracker,此问题已在1.9.7版中修复。对于早期版本,请参见下文。
Hibernate Validator 5.x使用Unified Expression Language。特别是,它使用静态API方法来查找ExpressionFactory
的实现。但是,App Engine 1.9.4及更早版本中的bug似乎阻止仅在生产中使用任何表达式工厂实现。
在解决此问题之前,有两种解决方法:
如果不需要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>
如果您需要Bean Validation 1.1,可以使用reports来处理Apache BVal的存储库快照。我还没有测试。
更新说明:如我先前的回应(Glassfish EL或JUEL)所述,指定表达语言实现在开发中以及某些生产用例中都可以正常使用,但仍会因某些验证而失败。