Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Google App Engine中创建javax.el.ExpressionFactory以使用Hibernate验证器_Java_Google App Engine_Google Cloud Platform - Fatal编程技术网

如何在Google App Engine中创建javax.el.ExpressionFactory以使用Hibernate验证器

如何在Google App Engine中创建javax.el.ExpressionFactory以使用Hibernate验证器,java,google-app-engine,google-cloud-platform,Java,Google App Engine,Google Cloud Platform,我正试图在我的Google App Engine应用程序上升级到hibernate validator版本6,因此我在依赖项中添加了org.glassfish:javax.el:jar:3.0.1-b10 但是,在以下情况下不使用: 在本地开发环境中,我可以使用ExpressionFactory.newInstance()创建一个新的ExpressionFactory。ExpressionFactory来自本地Jetty安装Jetty 93/Jetty distribution/lib/apac

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

但是,在以下情况下不使用:

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

在部署的GAE环境中,
ExpressionFactory
来自
java8\u 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();
final Constructor=com.sun.el.ExpressionFactoryImpl.class.getConstructor();
final ExpressionFactoryImpl expressionFactory=constructor.newInstance();
  • 为什么GAE环境如此热衷于加载
    org.apache.el.expressionfactorympl
    ,即使参考实现
    com.sun.el.expressionfactorympl
    在类路径上
  • 如何使GAE加载现有的
    ExpressionFactoryImpl
    ,以便创建hibernate验证工厂?我是否必须手动提供,以便提供正确的
    expressionfactorympl

我最终解决了这个问题,在appengine-web.xml中添加了一个系统属性:

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


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

Hi,您的XML文件中是否指定了“com.sun.el.ExpressionFactoryImpl”依赖项?尝试提供配置详细信息。com.sun.faces.expressionFactory com.sun.el.expressionfactorympl我将com.sun.faces.expressionFactory com.sun.el.expressionfactorympl添加到我的web.xml中,没有什么不同……我认为报告并解决了类似的问题。试试看。如果您仍然遇到问题,请提供您的配置文件。谢谢您-在大量搜索解决方案后,添加
系统属性
条目已奏效。我以前曾尝试按所述将文件添加到
META-INF
中,但这并不能解决我在使用Java8标准时遇到的问题。
com.sun.el.ExpressionFactoryImpl