【问题标题】:How to create javax.el.ExpressionFactory in Google App Engine to use Hibernate Validator如何在 Google App Engine 中创建 javax.el.E​​xpressionFactory 以使用 Hibernate Validator
【发布时间】:2018-11-18 21:08:55
【问题描述】:

我正在尝试在我的 Google App Engine 应用程序(needs javax.el)上升级到休眠验证器版本 6,因此我将 org.glassfish:javax.el:jar:3.0.1-b10 添加到我的依赖项中。

但是,这没有被使用:

在本地开发环境中,我可以用ExpressionFactory.newInstance() 创建一个新的ExpressionFactoryExpressionFactory 来自本地 Jetty 安装 jetty93/jetty-distribution/lib/apache-jsp/org.mortbay.jasper.apache-el-8.0.33.jar,它从同一个 jar 中返回实现 org.apache.el.ExpressionFactoryImpl

在部署的 GAE 环境中,ExpressionFactory 来自 java8_runtime/runtime-shared.jar!/javax/el/ExpressionFactory.class,但 ExpressionFactory.newInstance() 仍会尝试获取 org.apache.el.ExpressionFactoryImpl,即使存在 com.sun.el.ExpressionFactoryImpl

在这两种环境中,我都可以从WEB-INF/lib/javax.el-3.0.1-b10.jar 手动加载com.sun.el.ExpressionFactoryImpl,因此它存在于类路径中:

final Constructor<ExpressionFactoryImpl> constructor = com.sun.el.ExpressionFactoryImpl.class.getConstructor();
final ExpressionFactoryImpl expressionFactory = constructor.newInstance();
  • 为什么 GAE 环境如此热衷于加载 org.apache.el.ExpressionFactoryImpl,即使参考实现 com.sun.el.ExpressionFactoryImpl 在类路径上?
  • 如何让 GAE 加载现有的 ExpressionFactoryImpl,以便创建休眠的 ValidatorFactory?我是否必须手动提供MessageInterpolator 才能提供正确的ExpressionFactoryImpl

【问题讨论】:

  • 嗨,您的 XML 文件中是否指定了“com.sun.el.E​​xpressionFactoryImpl”依赖项?尝试提供配置详细信息。 com.sun.faces.expressionFactorycom.sun.el.E​​xpressionFactoryImpl
  • 我添加了 com.sun.faces.expressionFactorycom.sun.el.E​​xpressionFactoryImpl 到我的 web.xml,并没有什么不同...
  • 我认为here 报告并解决了类似的问题。试试看。如果您仍然遇到问题,请提供您的配置文件。

标签: java google-app-engine google-cloud-platform


【解决方案1】:

我终于通过在 appengine-web.xml 中添加一个系统属性来解决它:

<system-properties>
    <property name="javax.el.ExpressionFactory" value="com.sun.el.ExpressionFactoryImpl" />
</system-properties>

另一种可能性是添加文件 'META-INF/services/javax.el.E​​xpressionFactory' 的内容:

com.sun.el.ExpressionFactoryImpl

另见this answer

第二种方法我没有测试,但是在apache-el ExpressionFactory的源码中它的优先级最高,而系统属性只有第三次尝试。

【讨论】:

  • 谢谢 - 经过大量搜索解决方案后,添加 system-properties 条目有效。我之前曾尝试按照META-INF 中的说明添加文件,但这并没有解决我使用 Java 8 标准时的问题。
猜你喜欢
  • 2017-10-31
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 2011-03-09
  • 2021-06-07
  • 2019-07-09
  • 2012-08-27
  • 1970-01-01
相关资源
最近更新 更多