【发布时间】:2018-11-18 21:08:55
【问题描述】:
我正在尝试在我的 Google App Engine 应用程序(needs javax.el)上升级到休眠验证器版本 6,因此我将 org.glassfish:javax.el:jar:3.0.1-b10 添加到我的依赖项中。
但是,这没有被使用:
在本地开发环境中,我可以用ExpressionFactory.newInstance() 创建一个新的ExpressionFactory。 ExpressionFactory 来自本地 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.ExpressionFactoryImpl”依赖项?尝试提供配置详细信息。
com.sun.faces.expressionFactory com.sun.el.ExpressionFactoryImpl -
我添加了
到我的 web.xml,并没有什么不同...com.sun.faces.expressionFactory com.sun.el.ExpressionFactoryImpl -
我认为here 报告并解决了类似的问题。试试看。如果您仍然遇到问题,请提供您的配置文件。
标签: java google-app-engine google-cloud-platform