Как создать javax.el.ExpressionFactory в Google App Engine для использования Hibernate Validator - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь перейти на 6-ю версию валидатора гибернации в своем приложении Google App Engine, которому нужен javax.el , поэтому я добавил org.glassfish:javax.el:jar:3.0.1-b10 в мои зависимости.

Однако, это не используется:

В локальной среде разработчика я могу создать новый ExpressionFactory с ExpressionFactory.newInstance().ExpressionFactory из локальной установки Jetty jetty93/jetty-distribution/lib/apache-jsp/org.mortbay.jasper.apache-el-8.0.33.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.

В обеих средах я могу вручную загрузить 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 чтобы я мог создать спящий ValidatorFactory?Нужно ли вручную вводить MessageInterpolator, чтобы я мог правильно указать ExpressionFactoryImpl?

1 Ответ

0 голосов
/ 05 декабря 2018

Я наконец решил это, добавив системное свойство в appengine-web.xml:

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

Другой возможностью может быть добавление файла 'META-INF / services / javax.el.ExpressionFactory' с содержанием:

com.sun.el.ExpressionFactoryImpl

См. Также этот ответ

Я не тестировал второй метод, но он имеет наивысший приоритет в источнике apache-el ExpressionFactory, а системное свойство - только третья попытка.

...