我在 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>
所有库都与应用程序一起解聚。
验证库:
<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 中设置首选包,从 weblogic 模块中删除 JPA 库,但都没有效果。
加载验证消息的属性文件时似乎出现了一些问题,但这可能是什么原因?
最佳答案
我意识到这篇文章有点旧,可能已经解决了。如果其他人遇到同样的问题,只是想更新。
根本问题是多个 jar 解析/冲突。 Weblogic 引用并从下面列出的系统提供的 jar 中加载 EL 类(位于模块目录中)
- glassfish.el_*.jar
- javax.jsp_1*.jar
就我而言,我需要指示 weblogic 服务器从应用程序内的 jar 加载下面列出的包的类(ear 中的 weblogic-application.xml)
<prefer-application-packages>
<package-name>javax.el.*</package-name>
<package-name>com.sun.el.*</package-name>
</prefer-application-packages>
如果只是 Web 应用程序,可以在 weblogic.xml 中提供相同的配置。
http://docs.oracle.com/cd/E24329_01/web.1211/e21049/weblogic_xml.htm
关于java - Weblogic 10 上的 Hibernate validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21401839/