This is an automated email from the ASF dual-hosted git repository.

ddekany pushed a commit to branch 2.3-gae
in repository https://gitbox.apache.org/repos/asf/freemarker.git

commit 763e67522374a916bf38439d86e68a0dd5d70f54
Author: ddekany <[email protected]>
AuthorDate: Fri Dec 8 13:55:13 2023 +0100

    Updated Jetty version used in JUnit tests, because the old one can't run on 
Java 16. Also some adjustments in Jetty setup was needed.
---
 ivy.xml                                            |   9 +-
 .../ext/jsp/RealServletContainertTest.java         |   4 +-
 .../freemarker/template/MockServletContext.java    | 143 +++++++++++++++++++++
 .../freemarker/test/servlet/WebAppTestCase.java    |  23 +++-
 src/test/resources/logback-test.xml                |   2 +
 5 files changed, 174 insertions(+), 7 deletions(-)

diff --git a/ivy.xml b/ivy.xml
index 8a5afead..b379f16f 100644
--- a/ivy.xml
+++ b/ivy.xml
@@ -21,7 +21,7 @@
   AFTER CHANGING THIS FILE don't forget to issue: ant update-deps
 -->
 <!DOCTYPE ivy-module [
-    <!ENTITY jetty.version "7.6.21.v20160908">
+    <!ENTITY jetty.version "9.4.53.v20231009">
     <!ENTITY slf4j.version "1.6.1">
     <!ENTITY spring.version "2.5.6.SEC03">
 ]>
@@ -143,9 +143,12 @@
 
     <dependency org="org.eclipse.jetty" name="jetty-server" 
rev="&jetty.version;" conf="test->default" />
     <dependency org="org.eclipse.jetty" name="jetty-webapp" 
rev="&jetty.version;" conf="test->default" />
-    <dependency org="org.eclipse.jetty" name="jetty-jsp" rev="&jetty.version;" 
conf="test->default" />
     <dependency org="org.eclipse.jetty" name="jetty-util" 
rev="&jetty.version;" conf="test->default" />
-    
+    <dependency org="org.eclipse.jetty" name="apache-jsp" 
rev="&jetty.version;" conf="test->default" />
+    <!-- JPS JSTL: -->
+    <dependency org="org.apache.taglibs" name="taglibs-standard-impl" 
rev="1.2.5" conf="test->default" />
+    <dependency org="org.apache.taglibs" name="taglibs-standard-spec" 
rev="1.2.5" conf="test->default" />
+
     <dependency org="displaytag" name="displaytag" rev="1.2" 
conf="test->default">
       <exclude org="com.lowagie" name="itext" />
       <exclude org="org.slf4j" name="slf4j-log4j12" />
diff --git a/src/test/java/freemarker/ext/jsp/RealServletContainertTest.java 
b/src/test/java/freemarker/ext/jsp/RealServletContainertTest.java
index ad0c7b6e..8c3982e7 100644
--- a/src/test/java/freemarker/ext/jsp/RealServletContainertTest.java
+++ b/src/test/java/freemarker/ext/jsp/RealServletContainertTest.java
@@ -207,15 +207,13 @@ public class RealServletContainertTest extends 
WebAppTestCase {
     public void tldDiscoveryRelative() throws Exception {
         assertExpectedEqualsOutput(WEBAPP_TLD_DISCOVERY, 
"subdir/test-rel.txt", "tester?view=subdir/test-rel.ftl");
     }
-    
+
     @Test
     public void errorStatusCodes() throws Exception {
         assertEquals(404, getResponseStatusCode(WEBAPP_ERRORS, "missing.jsp"));
         assertEquals(500, getResponseStatusCode(WEBAPP_ERRORS, 
"failing-runtime.jsp"));
         assertEquals(500, getResponseStatusCode(WEBAPP_ERRORS, 
"failing-parsetime.jsp"));
         
-        assertEquals(200, getResponseStatusCode(WEBAPP_ERRORS,
-                
"tester?view=not-failing.ftl&viewServlet=freemarker-default-dev"));
         assertEquals(404, getResponseStatusCode(WEBAPP_ERRORS,
                 "tester?view=missing.ftl&viewServlet=freemarker-default-dev"));
         assertEquals(200, getResponseStatusCode(WEBAPP_ERRORS,
diff --git a/src/test/java/freemarker/template/MockServletContext.java 
b/src/test/java/freemarker/template/MockServletContext.java
index f833bec4..0ed47ec0 100644
--- a/src/test/java/freemarker/template/MockServletContext.java
+++ b/src/test/java/freemarker/template/MockServletContext.java
@@ -22,12 +22,20 @@ import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Enumeration;
+import java.util.EventListener;
+import java.util.Map;
 import java.util.Set;
 
+import javax.servlet.Filter;
+import javax.servlet.FilterRegistration;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.Servlet;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+import javax.servlet.SessionCookieConfig;
+import javax.servlet.SessionTrackingMode;
+import javax.servlet.descriptor.JspConfigDescriptor;
 
 public class MockServletContext implements ServletContext {
 
@@ -55,6 +63,11 @@ public class MockServletContext implements ServletContext {
         return null;
     }
 
+    @Override
+    public boolean setInitParameter(String s, String s1) {
+        return false;
+    }
+
     public int getMajorVersion() {
         return 0;
     }
@@ -67,6 +80,16 @@ public class MockServletContext implements ServletContext {
         return 0;
     }
 
+    @Override
+    public int getEffectiveMajorVersion() {
+        return 0;
+    }
+
+    @Override
+    public int getEffectiveMinorVersion() {
+        return 0;
+    }
+
     public RequestDispatcher getNamedDispatcher(String arg0) {
         return null;
     }
@@ -103,6 +126,126 @@ public class MockServletContext implements ServletContext 
{
         return "MyApp";
     }
 
+    @Override
+    public ServletRegistration.Dynamic addServlet(String s, String s1) {
+        return null;
+    }
+
+    @Override
+    public ServletRegistration.Dynamic addServlet(String s, Servlet servlet) {
+        return null;
+    }
+
+    @Override
+    public ServletRegistration.Dynamic addServlet(String s, Class<? extends 
Servlet> aClass) {
+        return null;
+    }
+
+    @Override
+    public <T extends Servlet> T createServlet(Class<T> aClass) throws 
ServletException {
+        return null;
+    }
+
+    @Override
+    public ServletRegistration getServletRegistration(String s) {
+        return null;
+    }
+
+    @Override
+    public Map<String, ? extends ServletRegistration> 
getServletRegistrations() {
+        return null;
+    }
+
+    @Override
+    public FilterRegistration.Dynamic addFilter(String s, String s1) {
+        return null;
+    }
+
+    @Override
+    public FilterRegistration.Dynamic addFilter(String s, Filter filter) {
+        return null;
+    }
+
+    @Override
+    public FilterRegistration.Dynamic addFilter(String s, Class<? extends 
Filter> aClass) {
+        return null;
+    }
+
+    @Override
+    public <T extends Filter> T createFilter(Class<T> aClass) throws 
ServletException {
+        return null;
+    }
+
+    @Override
+    public FilterRegistration getFilterRegistration(String s) {
+        return null;
+    }
+
+    @Override
+    public Map<String, ? extends FilterRegistration> getFilterRegistrations() {
+        return null;
+    }
+
+    @Override
+    public SessionCookieConfig getSessionCookieConfig() {
+        return null;
+    }
+
+    @Override
+    public void setSessionTrackingModes(Set<SessionTrackingMode> set) {
+
+    }
+
+    @Override
+    public Set<SessionTrackingMode> getDefaultSessionTrackingModes() {
+        return null;
+    }
+
+    @Override
+    public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() {
+        return null;
+    }
+
+    @Override
+    public void addListener(String s) {
+
+    }
+
+    @Override
+    public <T extends EventListener> void addListener(T t) {
+
+    }
+
+    @Override
+    public void addListener(Class<? extends EventListener> aClass) {
+
+    }
+
+    @Override
+    public <T extends EventListener> T createListener(Class<T> aClass) throws 
ServletException {
+        return null;
+    }
+
+    @Override
+    public JspConfigDescriptor getJspConfigDescriptor() {
+        return null;
+    }
+
+    @Override
+    public ClassLoader getClassLoader() {
+        return null;
+    }
+
+    @Override
+    public void declareRoles(String... strings) {
+
+    }
+
+    @Override
+    public String getVirtualServerName() {
+        return null;
+    }
+
     public Enumeration getServletNames() {
         return null;
     }
diff --git a/src/test/java/freemarker/test/servlet/WebAppTestCase.java 
b/src/test/java/freemarker/test/servlet/WebAppTestCase.java
index 0366bde7..ab14fb28 100644
--- a/src/test/java/freemarker/test/servlet/WebAppTestCase.java
+++ b/src/test/java/freemarker/test/servlet/WebAppTestCase.java
@@ -34,6 +34,10 @@ import java.util.regex.Pattern;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.eclipse.jetty.annotations.ServletContainerInitializersStarter;
+import org.eclipse.jetty.apache.jsp.JettyJasperInitializer;
+import org.eclipse.jetty.plus.annotation.ContainerInitializer;
+import org.eclipse.jetty.server.NetworkConnector;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.handler.ContextHandlerCollection;
 import org.eclipse.jetty.webapp.WebAppContext;
@@ -111,7 +115,7 @@ public class WebAppTestCase {
 
         ensureWebAppIsDeployed(webAppName);
 
-        final URI uri = new URI("http://localhost:"; + 
server.getConnectors()[0].getLocalPort()
+        final URI uri = new URI("http://localhost:"; + ((NetworkConnector) 
server.getConnectors()[0]).getLocalPort()
                 + "/" + webAppName + "/" + webAppRelURL);
 
         final HttpURLConnection httpCon = (HttpURLConnection) 
uri.toURL().openConnection();
@@ -234,6 +238,9 @@ public class WebAppTestCase {
         context.setAttribute(
                 ATTR_JETTY_CONTAINER_INCLUDE_JAR_PATTERN,
                 ".*taglib.*\\.jar$");
+
+        addJasperInitializer(context);
+
         contextHandlers.addHandler(context);
         // As we add this after the Server was started, it has to be started 
manually:
         context.start();
@@ -242,6 +249,20 @@ public class WebAppTestCase {
         LOG.info("Deployed web app.: {}", webAppName);
     }
 
+    /**
+     * Without this, we will have this error when loading a taglib:
+     * NullPointerException: Cannot invoke 
"org.apache.jasper.compiler.TldCache.getTldResourcePath(String)" because the
+     * return value of "org.apache.jasper.Options.getTldCache()" is null
+     */
+    private static void addJasperInitializer(WebAppContext context) {
+        JettyJasperInitializer jettyJasperInitializer = new 
JettyJasperInitializer();
+        ServletContainerInitializersStarter servletContainerInitializersStarter
+                = new ServletContainerInitializersStarter(context);
+        ContainerInitializer containerInitializer = new 
ContainerInitializer(jettyJasperInitializer, null);
+        context.setAttribute("org.eclipse.jetty.containerInitializers", 
List.of(containerInitializer));
+        context.addBean(servletContainerInitializersStarter, true);
+    }
+
     private static void deleteTemporaryDirectories() throws IOException {
         if (testTempDirectory.getParentFile() == null) {
             throw new IOException("Won't delete the root directory");
diff --git a/src/test/resources/logback-test.xml 
b/src/test/resources/logback-test.xml
index e3876ec4..2ddfb821 100644
--- a/src/test/resources/logback-test.xml
+++ b/src/test/resources/logback-test.xml
@@ -26,6 +26,8 @@
        </appender>
        
        <logger name="org.eclipse.jetty" level="INFO" />
+       <logger name="org.apache.tomcat" level="INFO" />
+       <logger name="org.apache.jasper" level="INFO" />
 
        <root level="debug">
                <appender-ref ref="STDOUT" />

Reply via email to