This is an automated email from the ASF dual-hosted git repository.
jlmonteiro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomee.git
The following commit(s) were added to refs/heads/master by this push:
new 86bdf225c1 Quick and dirty fix for Tomcat NPE
https://github.com/apache/tomcat/pull/505
86bdf225c1 is described below
commit 86bdf225c1bce93bac2a981277f8a92f26292891
Author: Jean-Louis Monteiro <[email protected]>
AuthorDate: Mon Apr 25 16:52:18 2022 +0200
Quick and dirty fix for Tomcat NPE
https://github.com/apache/tomcat/pull/505
---
.../apache/openejb/server/httpd/util/HttpUtil.java | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git
a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/util/HttpUtil.java
b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/util/HttpUtil.java
index b07924baac..260347776a 100644
---
a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/util/HttpUtil.java
+++
b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/util/HttpUtil.java
@@ -33,6 +33,9 @@ import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
@@ -158,12 +161,29 @@ public final class HttpUtil {
final ClassLoader classLoader =
ParentClassLoaderFinder.Helper.get();
final Class<?> jspFactory =
classLoader.loadClass("org.apache.jasper.runtime.JspFactoryImpl");
final Class<?> jspFactoryApi =
classLoader.loadClass("jakarta.servlet.jsp.JspFactory");
- jspFactoryApi.getMethod("setDefaultFactory",
jspFactoryApi).invoke(null, jspFactory.newInstance());
+
+ final Object newInstance = jspFactory.newInstance();
+ jspFactoryApi.getMethod("setDefaultFactory",
jspFactoryApi).invoke(null, newInstance);
+
+ // bug introduced in Tomcat with
https://github.com/apache/tomcat/commit/5e8eb5533f551c3dbc3003e4c2f4f0d2958a8eb3
+ // should be eventually removed when fixed
+ final Class<?> jspInitializer =
classLoader.loadClass("org.apache.jasper.servlet.JasperInitializer");
+ setFinalStatic(jspInitializer.getDeclaredField("defaultFactory"),
newInstance);
} catch (final Throwable t) {
// no-op
}
}
+ static void setFinalStatic(final Field field, final Object newValue)
throws Exception {
+ field.setAccessible(true);
+
+ Field modifiersField = Field.class.getDeclaredField("modifiers");
+ modifiersField.setAccessible(true);
+ modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
+
+ field.set(null, newValue);
+ }
+
private static ClassLoader setClassLoader(final WebContext wc, final
Thread thread) {
final ClassLoader old = thread.getContextClassLoader();
thread.setContextClassLoader(wc.getClassLoader() == null ?
wc.getAppContext().getClassLoader() : wc.getClassLoader());