gpt4 book ai didi

java - 如何在 Google App Engine 中创建 javax.el.E​​xpressionFactory 以使用 Hibernate Validator

转载 作者:行者123 更新时间:2023-11-30 01:59:26 29 4
gpt4 key购买 nike

我正在尝试在我的 Google App Engine 应用程序上升级到 hibernate validator 版本 6,needs javax.el ,所以我添加了 org.glassfish:javax.el:jar:3.0.1-b10我的依赖项。

但是,这并没有被使用:

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

在部署的 GAE 环境中,ExpressionFactory来自 java8_runtime/runtime-shared.jar!/javax/el/ExpressionFactory.class但是ExpressionFactory.newInstance()仍然试图获得 org.apache.el.ExpressionFactoryImpl ,尽管 com.sun.el.ExpressionFactoryImpl存在。

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

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所以我可以创建一个 hibernate validator 工厂?我是否必须手动提供 MessageInterpolator 这样我就可以提供正确的 ExpressionFactoryImpl

最佳答案

我最终通过向 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的源码中优先级最高,而系统属性只是第三次尝试。

关于java - 如何在 Google App Engine 中创建 javax.el.E​​xpressionFactory 以使用 Hibernate Validator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53365481/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com