You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rm...@apache.org on 2014/03/12 23:41:50 UTC

svn commit: r1576969 - /openwebbeans/trunk/webbeans-el22/src/main/java/org/apache/webbeans/el22/WebBeansELResolver.java

Author: rmannibucau
Date: Wed Mar 12 22:41:49 2014
New Revision: 1576969

URL: http://svn.apache.org/r1576969
Log:
OWB-939 ensuring we resolve beans from EL with best type we can use to ensure our proxies are usable even for normal scope beans otherwise we proxy Object which is not compatible with BeanResolver

Modified:
    openwebbeans/trunk/webbeans-el22/src/main/java/org/apache/webbeans/el22/WebBeansELResolver.java

Modified: openwebbeans/trunk/webbeans-el22/src/main/java/org/apache/webbeans/el22/WebBeansELResolver.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-el22/src/main/java/org/apache/webbeans/el22/WebBeansELResolver.java?rev=1576969&r1=1576968&r2=1576969&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-el22/src/main/java/org/apache/webbeans/el22/WebBeansELResolver.java (original)
+++ openwebbeans/trunk/webbeans-el22/src/main/java/org/apache/webbeans/el22/WebBeansELResolver.java Wed Mar 12 22:41:49 2014
@@ -19,6 +19,7 @@
 package org.apache.webbeans.el22;
 
 import java.beans.FeatureDescriptor;
+import java.lang.reflect.Type;
 import java.util.Iterator;
 import java.util.Set;
 
@@ -29,6 +30,7 @@ import javax.enterprise.context.Dependen
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 
+import org.apache.webbeans.component.OwbBean;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.container.BeanManagerImpl;
 import org.apache.webbeans.el.ELContextStore;
@@ -165,7 +167,7 @@ public class WebBeansELResolver extends 
         {
             // If no contextualInstance found on the store
             CreationalContext<Object> creationalContext = manager.createCreationalContext(bean);
-            contextualInstance = manager.getReference(bean, Object.class, creationalContext);
+            contextualInstance = manager.getReference(bean, bestType(bean), creationalContext);
             if (contextualInstance != null)
             {
                 context.setPropertyResolved(true);
@@ -176,6 +178,24 @@ public class WebBeansELResolver extends 
         return contextualInstance;
     }
 
+    private static Type bestType(final Bean<?> bean)
+    {
+        if (bean == null)
+        {
+            return Object.class;
+        }
+        final Class<?> bc = bean.getBeanClass();
+        if (bc != null)
+        {
+            return bc;
+        }
+        if (OwbBean.class.isInstance(bean))
+        {
+            return OwbBean.class.cast(bean).getReturnType();
+        }
+        return Object.class;
+    }
+
     /**
      * {@inheritDoc}
      */