You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by be...@apache.org on 2010/06/02 22:32:16 UTC

svn commit: r950749 - in /openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/inject/ test/java/org/apache/webbeans/newtests/promethods/ test/java/org/apache/webbeans/newtests/promethods/beans/

Author: bergmark
Date: Wed Jun  2 20:32:16 2010
New Revision: 950749

URL: http://svn.apache.org/viewvc?rev=950749&view=rev
Log:
[OWB-381] Fix NPE in AbstractInjectable when injected is null.

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/PersonProducerTest.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/beans/PersonProducerBean.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java?rev=950749&r1=950748&r2=950749&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java Wed Jun  2 20:32:16 2010
@@ -129,7 +129,7 @@ public abstract class AbstractInjectable
         
         if(dependentProducer)
         {
-            if(!Serializable.class.isAssignableFrom(injected.getClass()))
+            if(injected != null && !Serializable.class.isAssignableFrom(injected.getClass()))
             {
                 throw new IllegalProductException("If a producer method or field of scope @Dependent returns an serializable object for injection " +
                                                         "into an injection point "+ injectionPoint +" that requires a passivation capable dependency");

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/PersonProducerTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/PersonProducerTest.java?rev=950749&r1=950748&r2=950749&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/PersonProducerTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/PersonProducerTest.java Wed Jun  2 20:32:16 2010
@@ -68,4 +68,30 @@ public class PersonProducerTest extends 
         
         shutDownContainer();
     }
+    
+    @Test
+    @SuppressWarnings("unchecked")
+    public void testNullPersonProducer()
+    {
+        Collection<URL> beanXmls = new ArrayList<URL>();
+        
+        Collection<Class<?>> beanClasses = new ArrayList<Class<?>>();
+        beanClasses.add(Person.class);
+        beanClasses.add(PersonProducerBean.class);
+        
+        startContainer(beanClasses, beanXmls);      
+        
+        Set<Bean<?>> beans = getBeanManager().getBeans("nullInjectedPersonProducer");
+        Assert.assertNotNull(beans);        
+        Bean<Person> bean = (Bean<Person>)beans.iterator().next();
+        
+        Assert.assertTrue(bean instanceof ProducerMethodBean);
+        
+        CreationalContext<Person> ctx = getBeanManager().createCreationalContext(bean);
+        
+        Object reference = getBeanManager().getReference(bean, Person.class, ctx);
+        Assert.assertNull(reference);
+        
+        shutDownContainer();
+    }
 }

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/beans/PersonProducerBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/beans/PersonProducerBean.java?rev=950749&r1=950748&r2=950749&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/beans/PersonProducerBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/promethods/beans/PersonProducerBean.java Wed Jun  2 20:32:16 2010
@@ -18,7 +18,7 @@
  */
 package org.apache.webbeans.newtests.promethods.beans;
 
-import javax.enterprise.context.SessionScoped;
+import javax.enterprise.context.Dependent;
 import javax.enterprise.inject.Produces;
 import javax.inject.Named;
 
@@ -27,9 +27,20 @@ import org.apache.webbeans.newtests.prom
 public class PersonProducerBean
 {
     
-    @Produces @SessionScoped @Named("personProducer")
+    @Produces @Named("personProducer")
     public Person producer()
     {
         return new Person();
     }
+    
+    @Produces @Dependent @Named("nullPersonProducer")
+    public Person nullProducer()
+    {
+        return null;
+    }
+    
+    @Produces @Dependent @Named("nullInjectedPersonProducer")
+    public Person nullInjectedPersonProducer(@Named("nullPersonProducer") Person p){
+        return p;
+    }
 }