You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ta...@apache.org on 2018/12/10 14:26:43 UTC

[myfaces] branch 2.3.x updated: MYFACES-4274 Lookup ExpressionFactory, also if SUPPORT_JSP_AND_FACES_EL is false

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

tandraschko pushed a commit to branch 2.3.x
in repository https://gitbox.apache.org/repos/asf/myfaces.git


The following commit(s) were added to refs/heads/2.3.x by this push:
     new 137a20e  MYFACES-4274 Lookup ExpressionFactory, also if SUPPORT_JSP_AND_FACES_EL is false
137a20e is described below

commit 137a20e00e4fe7edda163f806c01507590d4e567
Author: Thomas Andraschko <ta...@apache.org>
AuthorDate: Mon Dec 10 15:26:31 2018 +0100

    MYFACES-4274 Lookup ExpressionFactory, also if SUPPORT_JSP_AND_FACES_EL is false
---
 .../myfaces/webapp/AbstractFacesInitializer.java   |  5 ++++
 .../myfaces/webapp/FaceletsInitilializer.java      | 27 +++++++++++++++++++---
 2 files changed, 29 insertions(+), 3 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 bdd04ef..7c251ba 100644
--- a/impl/src/main/java/org/apache/myfaces/webapp/AbstractFacesInitializer.java
+++ b/impl/src/main/java/org/apache/myfaces/webapp/AbstractFacesInitializer.java
@@ -511,6 +511,11 @@ public abstract class AbstractFacesInitializer implements FacesInitializer
      */
     protected static ExpressionFactory loadExpressionFactory(String expressionFactoryClassName)
     {
+        return loadExpressionFactory(expressionFactoryClassName, true);
+    }
+    
+    protected static ExpressionFactory loadExpressionFactory(String expressionFactoryClassName, boolean logMissing)
+    {
         try
         {
             ClassLoader cl = ClassUtils.getContextClassLoader();
diff --git a/impl/src/main/java/org/apache/myfaces/webapp/FaceletsInitilializer.java b/impl/src/main/java/org/apache/myfaces/webapp/FaceletsInitilializer.java
index 1bb0200..491041c 100644
--- a/impl/src/main/java/org/apache/myfaces/webapp/FaceletsInitilializer.java
+++ b/impl/src/main/java/org/apache/myfaces/webapp/FaceletsInitilializer.java
@@ -18,11 +18,12 @@
  */
 package org.apache.myfaces.webapp;
 
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import javax.el.ExpressionFactory;
 import javax.faces.FacesException;
 import javax.faces.context.ExternalContext;
 import javax.servlet.ServletContext;
-
 /**
  * This initializer initializes only Facelets. Specially checks for
  * org.apache.myfaces.EXPRESSION_FACTORY parameter.
@@ -31,18 +32,38 @@ import javax.servlet.ServletContext;
  */
 public class FaceletsInitilializer extends org.apache.myfaces.webapp.AbstractFacesInitializer
 {
+    private static final Logger log = Logger.getLogger(FaceletsInitilializer.class.getName());
 
     @Override
     protected void initContainerIntegration(ServletContext servletContext, ExternalContext externalContext)
     {
-
         ExpressionFactory expressionFactory = getUserDefinedExpressionFactory(externalContext);
         if (expressionFactory == null)
         {
+            String[] candidates = new String[] { "org.apache.el.ExpressionFactoryImpl",
+                "com.sun.el.ExpressionFactoryImpl", "de.odysseus.el.ExpressionFactoryImpl",
+                "org.jboss.el.ExpressionFactoryImpl", "com.caucho.el.ExpressionFactoryImpl" };
+            
+            for (String candidate : candidates)
+            {
+                expressionFactory = loadExpressionFactory(candidate, false);
+                if (expressionFactory != null)
+                {
+                    if (log.isLoggable(Level.FINE))
+                    {
+                        log.fine("javax.el.ExpressionFactory implementation found: " + candidate);
+                    }
+                    break;
+                }
+            }
+        }
+
+        if (expressionFactory == null)
+        {
             throw new FacesException("No javax.el.ExpressionFactory found. Please provide" +
                     " <context-param> in web.xml: org.apache.myfaces.EXPRESSION_FACTORY");
         }
-
+        
         buildConfiguration(servletContext, externalContext, expressionFactory);
     }