This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/main by this push: new bdb3c45 Remove some unnecessary restrictions. Aligns with Servlet 6.0 bdb3c45 is described below commit bdb3c4589fb28ca121c032dafaa0170cb29ee7eb Author: Mark Thomas <ma...@apache.org> AuthorDate: Thu Nov 18 16:48:34 2021 +0000 Remove some unnecessary restrictions. Aligns with Servlet 6.0 --- java/jakarta/servlet/ServletContext.java | 75 ++-------------------- java/org/apache/catalina/core/StandardContext.java | 27 +++----- .../apache/catalina/core/TesterTldListener.java | 4 +- webapps/docs/changelog.xml | 8 +++ 4 files changed, 26 insertions(+), 88 deletions(-) diff --git a/java/jakarta/servlet/ServletContext.java b/java/jakarta/servlet/ServletContext.java index 6a61c2d..8f93735 100644 --- a/java/jakarta/servlet/ServletContext.java +++ b/java/jakarta/servlet/ServletContext.java @@ -121,14 +121,6 @@ public interface ServletContext { * * @return The major version declared in web.xml * - * @throws UnsupportedOperationException If called from a - * {@link ServletContextListener#contextInitialized(ServletContextEvent)} - * method of a {@link ServletContextListener} that was not defined in a - * web.xml file, a web-fragment.xml file nor annotated with - * {@link jakarta.servlet.annotation.WebListener}. For example, a - * {@link ServletContextListener} defined in a TLD would not be able to - * use this method. - * * @since Servlet 3.0 */ public int getEffectiveMajorVersion(); @@ -139,14 +131,6 @@ public interface ServletContext { * * @return The minor version declared in web.xml * - * @throws UnsupportedOperationException If called from a - * {@link ServletContextListener#contextInitialized(ServletContextEvent)} - * method of a {@link ServletContextListener} that was not defined in a - * web.xml file, a web-fragment.xml file nor annotated with - * {@link jakarta.servlet.annotation.WebListener}. For example, a - * {@link ServletContextListener} defined in a TLD would not be able to - * use this method. - * * @since Servlet 3.0 */ public int getEffectiveMinorVersion(); @@ -795,15 +779,10 @@ public interface ServletContext { * SessionTrackingMode#SSL} is supported if at least one of the connectors * used by this context has the attribute <code>secure</code> set to * <code>true</code>. + * * @return The set of default session tracking modes for this web * application - * @throws UnsupportedOperationException If called from a - * {@link ServletContextListener#contextInitialized(ServletContextEvent)} - * method of a {@link ServletContextListener} that was not defined in a - * web.xml file, a web-fragment.xml file nor annotated with - * {@link jakarta.servlet.annotation.WebListener}. For example, a - * {@link ServletContextListener} defined in a TLD would not be able to - * use this method. + * * @since Servlet 3.0 */ public Set<SessionTrackingMode> getDefaultSessionTrackingModes(); @@ -811,15 +790,10 @@ public interface ServletContext { /** * Obtains the currently enabled session tracking modes for this web * application. + * * @return The value supplied via {@link #setSessionTrackingModes(Set)} if * one was previously set, else return the defaults - * @throws UnsupportedOperationException If called from a - * {@link ServletContextListener#contextInitialized(ServletContextEvent)} - * method of a {@link ServletContextListener} that was not defined in a - * web.xml file, a web-fragment.xml file nor annotated with - * {@link jakarta.servlet.annotation.WebListener}. For example, a - * {@link ServletContextListener} defined in a TLD would not be able to - * use this method. + * * @since Servlet 3.0 */ public Set<SessionTrackingMode> getEffectiveSessionTrackingModes(); @@ -887,13 +861,7 @@ public interface ServletContext { /** * @return TODO - * @throws UnsupportedOperationException If called from a - * {@link ServletContextListener#contextInitialized(ServletContextEvent)} - * method of a {@link ServletContextListener} that was not defined in a - * web.xml file, a web-fragment.xml file nor annotated with - * {@link jakarta.servlet.annotation.WebListener}. For example, a - * {@link ServletContextListener} defined in a TLD would not be able to - * use this method. + * * @since Servlet 3.0 TODO SERVLET3 - Add comments */ public JspConfigDescriptor getJspConfigDescriptor(); @@ -903,15 +871,9 @@ public interface ServletContext { * * @return The associated web application class loader * - * @throws UnsupportedOperationException If called from a - * {@link ServletContextListener#contextInitialized(ServletContextEvent)} - * method of a {@link ServletContextListener} that was not defined in a - * web.xml file, a web-fragment.xml file nor annotated with - * {@link jakarta.servlet.annotation.WebListener}. For example, a - * {@link ServletContextListener} defined in a TLD would not be able to - * use this method. * @throws SecurityException if access to the class loader is prevented by a * SecurityManager + * * @since Servlet 3.0 */ public ClassLoader getClassLoader(); @@ -940,6 +902,7 @@ public interface ServletContext { * * @return The primary name of the virtual host on which this context is * deployed + * * @since Servlet 3.1 */ public String getVirtualServerName(); @@ -949,14 +912,6 @@ public interface ServletContext { * * @return The current default session timeout in minutes * - * @throws UnsupportedOperationException If called from a - * {@link ServletContextListener#contextInitialized(ServletContextEvent)} - * method of a {@link ServletContextListener} that was not defined in a - * web.xml file, a web-fragment.xml file nor annotated with - * {@link jakarta.servlet.annotation.WebListener}. For example, a - * {@link ServletContextListener} defined in a TLD would not be able to - * use this method. - * * @since Servlet 4.0 */ public int getSessionTimeout(); @@ -987,14 +942,6 @@ public interface ServletContext { * @return The character encoding name or {@code null} if no default has * been specified * - * @throws UnsupportedOperationException If called from a - * {@link ServletContextListener#contextInitialized(ServletContextEvent)} - * method of a {@link ServletContextListener} that was not defined in a - * web.xml file, a web-fragment.xml file nor annotated with - * {@link jakarta.servlet.annotation.WebListener}. For example, a - * {@link ServletContextListener} defined in a TLD would not be able to - * use this method. - * * @since Servlet 4.0 */ public String getRequestCharacterEncoding(); @@ -1026,14 +973,6 @@ public interface ServletContext { * @return The character encoding name or {@code null} if no default has * been specified * - * @throws UnsupportedOperationException If called from a - * {@link ServletContextListener#contextInitialized(ServletContextEvent)} - * method of a {@link ServletContextListener} that was not defined in a - * web.xml file, a web-fragment.xml file nor annotated with - * {@link jakarta.servlet.annotation.WebListener}. For example, a - * {@link ServletContextListener} defined in a TLD would not be able to - * use this method. - * * @since Servlet 4.0 */ public String getResponseCharacterEncoding(); diff --git a/java/org/apache/catalina/core/StandardContext.java b/java/org/apache/catalina/core/StandardContext.java index 47c20e1..ebc5448 100644 --- a/java/org/apache/catalina/core/StandardContext.java +++ b/java/org/apache/catalina/core/StandardContext.java @@ -6441,14 +6441,12 @@ public class StandardContext extends ContainerBase @Override public int getEffectiveMajorVersion() { - throw new UnsupportedOperationException( - sm.getString("noPluggabilityServletContext.notAllowed")); + return sc.getEffectiveMajorVersion(); } @Override public int getEffectiveMinorVersion() { - throw new UnsupportedOperationException( - sm.getString("noPluggabilityServletContext.notAllowed")); + return sc.getEffectiveMinorVersion(); } @Override @@ -6641,14 +6639,12 @@ public class StandardContext extends ContainerBase @Override public Set<SessionTrackingMode> getDefaultSessionTrackingModes() { - throw new UnsupportedOperationException( - sm.getString("noPluggabilityServletContext.notAllowed")); + return sc.getDefaultSessionTrackingModes(); } @Override public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() { - throw new UnsupportedOperationException( - sm.getString("noPluggabilityServletContext.notAllowed")); + return sc.getEffectiveSessionTrackingModes(); } @Override @@ -6678,14 +6674,12 @@ public class StandardContext extends ContainerBase @Override public JspConfigDescriptor getJspConfigDescriptor() { - throw new UnsupportedOperationException( - sm.getString("noPluggabilityServletContext.notAllowed")); + return sc.getJspConfigDescriptor(); } @Override public ClassLoader getClassLoader() { - throw new UnsupportedOperationException( - sm.getString("noPluggabilityServletContext.notAllowed")); + return sc.getClassLoader(); } @Override @@ -6701,8 +6695,7 @@ public class StandardContext extends ContainerBase @Override public int getSessionTimeout() { - throw new UnsupportedOperationException( - sm.getString("noPluggabilityServletContext.notAllowed")); + return sc.getSessionTimeout(); } @Override @@ -6713,8 +6706,7 @@ public class StandardContext extends ContainerBase @Override public String getRequestCharacterEncoding() { - throw new UnsupportedOperationException( - sm.getString("noPluggabilityServletContext.notAllowed")); + return sc.getRequestCharacterEncoding(); } @Override @@ -6725,8 +6717,7 @@ public class StandardContext extends ContainerBase @Override public String getResponseCharacterEncoding() { - throw new UnsupportedOperationException( - sm.getString("noPluggabilityServletContext.notAllowed")); + return sc.getResponseCharacterEncoding(); } @Override diff --git a/test/org/apache/catalina/core/TesterTldListener.java b/test/org/apache/catalina/core/TesterTldListener.java index e79d92e..37c6dbf 100644 --- a/test/org/apache/catalina/core/TesterTldListener.java +++ b/test/org/apache/catalina/core/TesterTldListener.java @@ -38,7 +38,7 @@ public class TesterTldListener implements ServletContextListener { // Try and use one of the Servlet 3.0 methods that should be blocked try { - sc.getEffectiveMajorVersion(); + sc.getServletRegistrations(); log.append("FAIL-01"); } catch (UnsupportedOperationException uoe) { log.append("PASS-01"); @@ -53,7 +53,7 @@ public class TesterTldListener implements ServletContextListener { if (servletContext == sce.getServletContext()) { log.append("PASS-02"); } else { - //log.append("FAIL-03"); + log.append("FAIL-03"); } } } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index a01e8fc..2eb6c43 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -111,6 +111,14 @@ Log warning if a listener is not nested inside a Server element although it must have been. (michaelo) </update> + <fix> + Where the getter can be called safely, remove the checks for + <code>ServletContext</code> getters called from a + <code>contextInitialized()</code> method of a + <code>ServletContextListener</code> that was not defined in a + <code>web.xml</code> file, a <code>web-fragment.xml</code> file nor + annotated with <code>WebListener</code>. (markt) + </fix> </changelog> </subsection> <subsection name="Coyote"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org