You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rs...@apache.org on 2014/09/29 15:13:38 UTC

svn commit: r1628178 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation: BaseProducerFactory.java ProducerMethodBeanBuilder.java

Author: rsandtner
Date: Mon Sep 29 13:13:37 2014
New Revision: 1628178

URL: http://svn.apache.org/r1628178
Log:
OWB-1014 validate injection of bean metadata in producers

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BaseProducerFactory.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BaseProducerFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BaseProducerFactory.java?rev=1628178&r1=1628177&r2=1628178&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BaseProducerFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BaseProducerFactory.java Mon Sep 29 13:13:37 2014
@@ -23,6 +23,7 @@ import org.apache.webbeans.config.WebBea
 import org.apache.webbeans.exception.WebBeansConfigurationException;
 import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.Asserts;
+import org.apache.webbeans.util.ClassUtil;
 import org.apache.webbeans.util.GenericsUtil;
 
 import javax.enterprise.event.Observes;
@@ -205,11 +206,18 @@ public abstract class BaseProducerFactor
 
         for (AnnotatedParameter param : annotatedMethod.getParameters())
         {
-            if (param.getBaseType().equals(InjectionPoint.class))
+            Type type = param.getBaseType();
+            if (type.equals(InjectionPoint.class))
             {
+
                 throw new DefinitionException("Error in definining disposal method of annotated method : " + annotatedMethod
                     + ". Disposal methods must not have an InjectionPoint.");
             }
+            else if (Bean.class.isAssignableFrom(ClassUtil.getClass(type)))
+            {
+                throw new DefinitionException("Error in defining disposal method of annoted method: " + annotatedMethod +
+                        ". Disposal methods must not have a Bean parameter.");
+            }
         }
     }
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java?rev=1628178&r1=1628177&r2=1628178&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodBeanBuilder.java Mon Sep 29 13:13:37 2014
@@ -19,13 +19,16 @@
 package org.apache.webbeans.component.creation;
 
 import java.lang.reflect.Method;
+import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.List;
 
 import javax.enterprise.inject.Produces;
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedParameter;
+import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanAttributes;
+import javax.enterprise.inject.spi.DefinitionException;
 
 import org.apache.webbeans.component.InjectionTargetBean;
 import org.apache.webbeans.component.ProducerMethodBean;
@@ -87,4 +90,20 @@ public class ProducerMethodBeanBuilder<T
     {
         return createBean((Class<T>) annotatedMember.getJavaMember().getReturnType());
     }
+
+    @Override
+    public void validate() throws DefinitionException
+    {
+        super.validate();
+
+        for (AnnotatedParameter<?> parameter : annotatedMember.getParameters())
+        {
+            Type type = parameter.getBaseType();
+            if (Bean.class.equals(ClassUtil.getClass(type)) &&
+                !annotatedMember.getBaseType().equals(ClassUtil.getActualTypeArguments(type)[0]))
+            {
+                throw new DefinitionException("Type parameter of the injected bean must be the same as the return type. Producer method: " + annotatedMember);
+            }
+        }
+    }
 }