You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by pa...@apache.org on 2022/10/13 01:36:52 UTC
[myfaces] branch 2.3-next updated: MYFACES-4447: avoid UnsupportedOperationException
This is an automated email from the ASF dual-hosted git repository.
paulnicolucci pushed a commit to branch 2.3-next
in repository https://gitbox.apache.org/repos/asf/myfaces.git
The following commit(s) were added to refs/heads/2.3-next by this push:
new 85e7c82a5 MYFACES-4447: avoid UnsupportedOperationException
new febd4d0c2 Merge pull request #341 from pnicolucci/MYFACES-4447-23Next
85e7c82a5 is described below
commit 85e7c82a521e869b0fdf4d9c076eeab37a049dc1
Author: Paul Nicolucci <pn...@gmail.com>
AuthorDate: Wed Oct 12 19:50:07 2022 -0400
MYFACES-4447: avoid UnsupportedOperationException
---
.../apache/myfaces/webapp/AbstractFacesInitializer.java | 10 ++++++----
.../myfaces/webapp/MyFacesContainerInitializer.java | 16 ++++++++++++++++
2 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/impl/src/main/java/org/apache/myfaces/webapp/AbstractFacesInitializer.java b/impl/src/main/java/org/apache/myfaces/webapp/AbstractFacesInitializer.java
index 0ae48a933..6a8145901 100644
--- a/impl/src/main/java/org/apache/myfaces/webapp/AbstractFacesInitializer.java
+++ b/impl/src/main/java/org/apache/myfaces/webapp/AbstractFacesInitializer.java
@@ -23,7 +23,6 @@ import org.apache.myfaces.config.FacesConfigurator;
import org.apache.myfaces.config.RuntimeConfig;
import org.apache.myfaces.context.servlet.StartupFacesContextImpl;
import org.apache.myfaces.context.servlet.StartupServletExternalContextImpl;
-import org.apache.myfaces.application.FacesServletMappingUtils;
import org.apache.myfaces.context.ExceptionHandlerImpl;
import org.apache.myfaces.application.viewstate.StateUtils;
import org.apache.myfaces.util.WebConfigParamUtils;
@@ -58,6 +57,7 @@ import java.util.logging.Logger;
import javax.enterprise.inject.spi.BeanManager;
import javax.faces.application.ViewVisitOption;
import javax.faces.push.PushContext;
+import javax.servlet.ServletRegistration;
import javax.websocket.DeploymentException;
import javax.websocket.server.ServerContainer;
import javax.websocket.server.ServerEndpointConfig;
@@ -696,13 +696,15 @@ public abstract class AbstractFacesInitializer implements FacesInitializer
*/
protected void initAutomaticExtensionlessMapping(FacesContext facesContext, ServletContext servletContext)
{
- FacesServletMappingUtils.ServletRegistrationInfo facesServletRegistration =
- FacesServletMappingUtils.getFacesServletRegistration(facesContext, servletContext);
+ ServletRegistration facesServletRegistration =
+ (ServletRegistration) servletContext.getAttribute(
+ MyFacesContainerInitializer.FACES_SERVLET_SERVLETREGISTRATION);
+
if (facesServletRegistration != null)
{
facesContext.getApplication().getViewHandler().getViews(facesContext, "/",
ViewVisitOption.RETURN_AS_MINIMAL_IMPLICIT_OUTCOME).forEach(s -> {
- facesServletRegistration.getRegistration().addMapping(s);
+ facesServletRegistration.addMapping(s);
});
}
}
diff --git a/impl/src/main/java/org/apache/myfaces/webapp/MyFacesContainerInitializer.java b/impl/src/main/java/org/apache/myfaces/webapp/MyFacesContainerInitializer.java
index 2d67ef92b..c6ecfe788 100644
--- a/impl/src/main/java/org/apache/myfaces/webapp/MyFacesContainerInitializer.java
+++ b/impl/src/main/java/org/apache/myfaces/webapp/MyFacesContainerInitializer.java
@@ -104,6 +104,16 @@ public class MyFacesContainerInitializer implements ServletContainerInitializer
*/
public static final String FACES_SERVLET_FOUND = "org.apache.myfaces.FACES_SERVLET_FOUND";
+ /**
+ * Store the FacesServlet ServletRegistration using this key in the ServletContext.
+ * The is necessary for the MyFaces Extensionless Mapping feature. This is used
+ * in AbstractFacesInitializer when configuring the Extensionless Mapping feature since
+ * an UnsupportedOperationException is thrown when calling the ServletContext.getServletRegistrations
+ * method if the StartupServletContextListener was added programmatically.
+ */
+ public static final String FACES_SERVLET_SERVLETREGISTRATION =
+ "org.apache.myfaces.FACES_SERVLET_SERVLETREGISTRATION";
+
private static final String FACES_CONFIG_RESOURCE = "/WEB-INF/faces-config.xml";
private static final Logger log = Logger.getLogger(MyFacesContainerInitializer.class.getName());
private static final String[] FACES_SERVLET_MAPPINGS = { "/faces/*", "*.jsf", "*.faces" };
@@ -181,6 +191,9 @@ public class MyFacesContainerInitializer implements ServletContainerInitializer
// added the mapping dynamically.
servletContext.setAttribute(FACES_SERVLET_ADDED_ATTRIBUTE, Boolean.TRUE);
+ // Add the FacesServlet ServletRegistration as an attribute for use during initialization.
+ servletContext.setAttribute(FACES_SERVLET_SERVLETREGISTRATION, servlet);
+
// add a log message
log.log(Level.INFO, "Added FacesServlet with mappings=" + Arrays.toString(mappings));
}
@@ -324,6 +337,9 @@ public class MyFacesContainerInitializer implements ServletContainerInitializer
// we found a FacesServlet; set an attribute for use during initialization
servletContext.setAttribute(FACES_SERVLET_FOUND, Boolean.TRUE);
isFacesServletPresent = true;
+
+ // Add the FacesServlet ServletRegistration as an attribute for use during initialization.
+ servletContext.setAttribute(FACES_SERVLET_SERVLETREGISTRATION, servletEntry.getValue());
}
}
return isFacesServletPresent;