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 2024/03/19 16:55:09 UTC

(myfaces) branch main updated: MYFACES-4655 fix resolving of FacesValidators without value (#682) (#686)

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

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


The following commit(s) were added to refs/heads/main by this push:
     new c9292a215 MYFACES-4655 fix resolving of FacesValidators without value (#682) (#686)
c9292a215 is described below

commit c9292a215481690825dce7ff9d4116db8dea0e9f
Author: Nicola Isotta <ni...@gmail.com>
AuthorDate: Tue Mar 19 17:55:02 2024 +0100

    MYFACES-4655 fix resolving of FacesValidators without value (#682) (#686)
---
 .../java/org/apache/myfaces/cdi/util/CDIUtils.java | 50 ++++++++++++++++------
 .../cdi/wrapper/FacesValidatorCDIWrapper.java      | 13 +++++-
 2 files changed, 49 insertions(+), 14 deletions(-)

diff --git a/impl/src/main/java/org/apache/myfaces/cdi/util/CDIUtils.java b/impl/src/main/java/org/apache/myfaces/cdi/util/CDIUtils.java
index ad0177bbd..93975ef16 100644
--- a/impl/src/main/java/org/apache/myfaces/cdi/util/CDIUtils.java
+++ b/impl/src/main/java/org/apache/myfaces/cdi/util/CDIUtils.java
@@ -18,21 +18,24 @@
  */
 package org.apache.myfaces.cdi.util;
 
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.Collections;
-import java.util.Set;
 import jakarta.enterprise.context.ContextNotActiveException;
 import jakarta.enterprise.context.RequestScoped;
 import jakarta.enterprise.context.SessionScoped;
 import jakarta.enterprise.context.spi.Context;
-
 import jakarta.enterprise.context.spi.CreationalContext;
 import jakarta.enterprise.inject.spi.Bean;
 import jakarta.enterprise.inject.spi.BeanManager;
 import jakarta.faces.context.ExternalContext;
 import jakarta.faces.context.FacesContext;
 import jakarta.faces.view.ViewScoped;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Collections;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 import org.apache.myfaces.webapp.FacesInitializerImpl;
 
 /**
@@ -65,7 +68,7 @@ public class CDIUtils
         }
         return resolveInstance(bm, beans, clazz);
     }
-    
+
     private static <T> T resolveInstance(BeanManager bm, Set<Bean<?>> beans, Type type)
     {
         Bean<?> bean = bm.resolve(beans);
@@ -74,7 +77,7 @@ public class CDIUtils
         return instance;
 
     }
-    
+
     @SuppressWarnings("unchecked")
     public static <T> Bean<T> get(BeanManager beanManager, Class<T> beanClass, Annotation... qualifiers)
     {
@@ -106,10 +109,22 @@ public class CDIUtils
     }
 
     public static <T> T get(BeanManager beanManager, Type type, boolean create, Annotation... qualifiers)
+    {
+        return get(beanManager, type, create, null, qualifiers);
+    }
+
+    public static <T> T get(BeanManager beanManager, Type type, boolean create,
+            String beanName, Annotation... qualifiers)
     {
         try
         {
             Set<Bean<?>> beans = beanManager.getBeans(type, qualifiers);
+            if (beanName != null)
+            {
+                beans = beans.stream()
+                        .filter(bean -> Objects.equals(beanName, getBeanName(bean)))
+                        .collect(Collectors.toSet());
+            }
             Bean<T> bean = (Bean<T>) beanManager.resolve(beans);
 
             return bean == null ? null : get(beanManager, bean, type, create);
@@ -120,6 +135,17 @@ public class CDIUtils
         }
     }
 
+    private static String getBeanName(Bean<?> bean)
+    {
+        String name = bean.getName();
+        if (name != null)
+        {
+            return name;
+        }
+        String className = bean.getBeanClass().getSimpleName();
+        return Character.toLowerCase(className.charAt(0)) + className.substring(1);
+    }
+
     public static <T> T get(BeanManager beanManager, Bean<T> bean, Type type, boolean create)
     {
         if (create)
@@ -133,7 +159,7 @@ public class CDIUtils
             return context.get(bean);
         }
     }
-    
+
     public static boolean isSessionScopeActive(BeanManager beanManager)
     {
         try 
@@ -153,7 +179,7 @@ public class CDIUtils
         }
         return false;
     }
-    
+
     public static boolean isRequestScopeActive(BeanManager beanManager)
     {
         try 
@@ -171,7 +197,7 @@ public class CDIUtils
         }
         return false;
     }
-    
+
     public static boolean isViewScopeActive(BeanManager beanManager)
     {
         try 
@@ -191,5 +217,5 @@ public class CDIUtils
         }
         return false;
     }
-        
-}
\ No newline at end of file
+   
+}
diff --git a/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesValidatorCDIWrapper.java b/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesValidatorCDIWrapper.java
index 465e907ea..3cf93e372 100644
--- a/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesValidatorCDIWrapper.java
+++ b/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesValidatorCDIWrapper.java
@@ -39,7 +39,7 @@ public class FacesValidatorCDIWrapper implements PartialStateHolder, Validator,
     }.getType();
 
     private transient Validator delegate;
-    
+
     private String validatorId;
     private boolean _transient;
     private boolean _initialStateMarked = false;
@@ -72,10 +72,19 @@ public class FacesValidatorCDIWrapper implements PartialStateHolder, Validator,
             {
                 delegate = CDIUtils.get(bm, Validator.class, true, literal);
             }
+            if (delegate == null)
+            {
+                literal = FacesValidator.Literal.of("", false, true);
+                delegate = CDIUtils.get(bm, VALIDATOR_TYPE, true, validatorId, literal);
+            }
+            if (delegate == null)
+            {
+                delegate = CDIUtils.get(bm, Validator.class, true, validatorId, literal);
+            }
         }
         return delegate;
     }
-    
+
     @Override
     public Object saveState(FacesContext context)
     {