我在Weblogic 10服务器上使用Hibernate Validator部署应用程序时遇到错误。
当应用程序通过注释运行表单验证时,它崩溃并出现错误:
Error 500--Internal Server Error
java.lang.NoSuchMethodError: javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory;
at org.hibernate.validator.internal.engine.messageinterpolation.InterpolationTerm.(InterpolationTerm.java:60)
at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.interpolateExpression(ResourceBundleMessageInterpolator.java:227)
at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.interpolateMessage(ResourceBundleMessageInterpolator.java:187)
at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.interpolate(ResourceBundleMessageInterpolator.java:120)
当应用程序在Tomcat服务器上运行时,不会发生此错误。
我们将weblogic-web-app文件设置为:
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
使用app。
对所有lib进行解复验证库:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.1.Final</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
<scope>runtime</scope>
</dependency>
样品验证:
@NotEmpty(message = "{newQuote.source}")
我们尝试在weblogic.xml中设置preffered包,从weblogic模块中删除JPA lib,两者都没有效果。
对于验证消息加载属性文件看起来有些问题,但可能是什么原因呢?
答案 0 :(得分:1)
我意识到帖子有点陈旧,可能已经解决了。如果其他人遇到同样的问题,只是想更新。
潜在的问题是多个jar解析/冲突。 Weblogic引用并从系统中加载EL类,提供下面列出的jar(位于modules目录中)
在我的情况下,我需要指示weblogic服务器从位于应用程序中的jar中加载下面列出的包的类(耳朵中的weblogic-application.xml)
<prefer-application-packages>
<package-name>javax.el.*</package-name>
<package-name>com.sun.el.*</package-name>
</prefer-application-packages>
如果它只是web-app,那么可以在weblogic.xml中提供相同的配置。
http://docs.oracle.com/cd/E24329_01/web.1211/e21049/weblogic_xml.htm