You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2015/03/17 11:57:50 UTC

svn commit: r1667259 - in /aries/trunk/blueprint/blueprint-maven-plugin: ./ src/main/java/org/apache/aries/blueprint/plugin/ src/main/java/org/apache/aries/blueprint/plugin/model/ src/test/java/org/apache/aries/blueprint/plugin/model/ src/test/java/org...

Author: cschneider
Date: Tue Mar 17 10:57:49 2015
New Revision: 1667259

URL: http://svn.apache.org/r1667259
Log:
[ARIES-1306] Support @Produces annotation in blueprint-maven-plugin

Added:
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BeanRef.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceRef.java
      - copied, changed from r1667047, aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceBean.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyFactoryBean.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyProduced.java
Removed:
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceBean.java
Modified:
    aries/trunk/blueprint/blueprint-maven-plugin/pom.xml
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Matcher.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/PropertyTest.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean3.java

Modified: aries/trunk/blueprint/blueprint-maven-plugin/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/pom.xml?rev=1667259&r1=1667258&r2=1667259&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/pom.xml (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/pom.xml Tue Mar 17 10:57:49 2015
@@ -31,7 +31,7 @@
     <groupId>org.apache.aries.blueprint</groupId>
     <artifactId>blueprint-maven-plugin</artifactId>
     <packaging>maven-plugin</packaging>
-    <version>1.1.1-SNAPSHOT</version>
+    <version>1.2.0-SNAPSHOT</version>
     <name>Apache Aries Blueprint Maven Plugin</name>
     <description>
         Maven plugin to create blueprint files from annotations
@@ -52,7 +52,6 @@
         <plugins>
             <plugin>
                 <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.1</version>
                 <configuration>
                     <target>1.7</target>
                     <source>1.7</source>
@@ -108,6 +107,11 @@
             <version>1.2</version>
         </dependency>
         <dependency>
+            <groupId>javax.enterprise</groupId>
+            <artifactId>cdi-api</artifactId>
+            <version>1.2</version>
+        </dependency>
+        <dependency>
             <groupId>javax.persistence</groupId>
             <artifactId>persistence-api</artifactId>
             <version>1.0.2</version>

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java?rev=1667259&r1=1667258&r2=1667259&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java Tue Mar 17 10:57:49 2015
@@ -29,7 +29,8 @@ import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.aries.blueprint.plugin.model.Bean;
 import org.apache.aries.blueprint.plugin.model.Context;
-import org.apache.aries.blueprint.plugin.model.OsgiServiceBean;
+import org.apache.aries.blueprint.plugin.model.OsgiServiceRef;
+import org.apache.aries.blueprint.plugin.model.ProducedBean;
 import org.apache.aries.blueprint.plugin.model.Property;
 import org.apache.aries.blueprint.plugin.model.PropertyWriter;
 import org.apache.aries.blueprint.plugin.model.TransactionalDef;
@@ -89,6 +90,9 @@ public class Generator implements Proper
         writer.writeAttribute("id", bean.id);
         writer.writeAttribute("class", bean.clazz.getName());
         writer.writeAttribute("ext", NS_EXT, "field-injection", "true");
+        if (bean instanceof ProducedBean) {
+            writeFactory((ProducedBean)bean);
+        }
         if (bean.initMethod != null) {
             writer.writeAttribute("init-method", bean.initMethod);
         }
@@ -101,6 +105,11 @@ public class Generator implements Proper
         writePersistenceFields(bean.persistenceFields);
     }
     
+    private void writeFactory(ProducedBean bean) throws XMLStreamException {
+        writer.writeAttribute("factory-ref", bean.factoryBeanId);
+        writer.writeAttribute("factory-method", bean.factoryMethod);
+    }
+
     private void writeTransactional(TransactionalDef transactionDef)
             throws XMLStreamException {
         if (transactionDef != null) {
@@ -139,12 +148,12 @@ public class Generator implements Proper
     }
 
     private void writeServiceRefs() throws XMLStreamException {
-        for (OsgiServiceBean serviceBean : context.getServiceRefs()) {
+        for (OsgiServiceRef serviceBean : context.getServiceRefs()) {
             writeServiceRef(serviceBean);
         }
     }
 
-    private void writeServiceRef(OsgiServiceBean serviceBean) throws XMLStreamException {
+    private void writeServiceRef(OsgiServiceRef serviceBean) throws XMLStreamException {
         writer.writeEmptyElement("reference");
         writer.writeAttribute("id", serviceBean.id);
         writer.writeAttribute("interface", serviceBean.clazz.getName());

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java?rev=1667259&r1=1667258&r2=1667259&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java Tue Mar 17 10:57:49 2015
@@ -28,24 +28,19 @@ import java.util.TreeSet;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
-import javax.inject.Named;
 import javax.persistence.PersistenceContext;
 import javax.persistence.PersistenceUnit;
 
-import org.springframework.stereotype.Component;
-
-public class Bean implements Comparable<Bean>{
-    public String id;
-    public Class<?> clazz;
+public class Bean extends BeanRef {
     public String initMethod;
     public String destroyMethod;
     public SortedSet<Property> properties;
     public Field[] persistenceFields;
-    public TransactionalDef transactionDef; 
-    
+    public TransactionalDef transactionDef;
+
     public Bean(Class<?> clazz) {
-        this.clazz = clazz;
-        this.id = getBeanName(clazz);
+        super(clazz);
+
         for (Method method : clazz.getDeclaredMethods()) {
             PostConstruct postConstruct = getEffectiveAnnotation(method, PostConstruct.class);
             if (postConstruct != null) {
@@ -94,23 +89,6 @@ public class Bean implements Comparable<
         }
     }
 
-    public static String getBeanName(Class<?> clazz) {
-        Component component = clazz.getAnnotation(Component.class);
-        Named named = clazz.getAnnotation(Named.class);
-        if (component != null && !"".equals(component.value())) {
-            return component.value();
-        } else if (named != null && !"".equals(named.value())) {
-            return named.value();    
-        } else {
-            String name = clazz.getSimpleName();
-            return getBeanNameFromSimpleName(name);
-        }
-    }
-
-    private static String getBeanNameFromSimpleName(String name) {
-        return name.substring(0, 1).toLowerCase() + name.substring(1, name.length());
-    }
-    
     private static <T extends Annotation> T getEffectiveAnnotation(Method method, Class<T> annotationClass) {
         final Class<?> methodClass = method.getDeclaringClass();
         final String name = method.getName();
@@ -149,17 +127,7 @@ public class Bean implements Comparable<
             return null;
         }
     }
-    
 
-    public boolean matches(Class<?> destType, String destId) {
-        boolean assignable = destType.isAssignableFrom(this.clazz);
-        return assignable && ((destId == null) || id.equals(destId));
-    }
-
-    @Override
-    public int compareTo(Bean other) {
-        return this.clazz.getName().compareTo(other.clazz.getName());
-    }
 
     @Override
     public int hashCode() {

Added: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BeanRef.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BeanRef.java?rev=1667259&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BeanRef.java (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BeanRef.java Tue Mar 17 10:57:49 2015
@@ -0,0 +1,70 @@
+package org.apache.aries.blueprint.plugin.model;
+
+import java.lang.reflect.Field;
+
+import javax.inject.Named;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+public class BeanRef implements Comparable<BeanRef> {
+    public String id;
+    public Class<?> clazz;
+    
+    /**
+     * 
+     * @param clazz interface or implementation class
+     */
+    public BeanRef(Class<?> clazz) {
+        this.clazz = clazz;
+        this.id = getBeanName(clazz);
+    }
+    
+    public BeanRef(Class<?> type, String id) {
+        this.clazz = type;
+        this.id = id;
+    }
+
+    public BeanRef(Field field) {
+        this(field.getType(), getDestinationId(field));
+    }
+
+    private static String getDestinationId(Field field) {
+        Named named = field.getAnnotation(Named.class);
+        if (named != null) {
+            return named.value();
+        }
+        Qualifier qualifier = field.getAnnotation(Qualifier.class);
+        if (qualifier != null) {
+            return qualifier.value();
+        }
+        return null;
+    }
+
+    public static String getBeanName(Class<?> clazz) {
+        Component component = clazz.getAnnotation(Component.class);
+        Named named = clazz.getAnnotation(Named.class);
+        if (component != null && !"".equals(component.value())) {
+            return component.value();
+        } else if (named != null && !"".equals(named.value())) {
+            return named.value();    
+        } else {
+            String name = clazz.getSimpleName();
+            return getBeanNameFromSimpleName(name);
+        }
+    }
+
+    private static String getBeanNameFromSimpleName(String name) {
+        return name.substring(0, 1).toLowerCase() + name.substring(1, name.length());
+    }
+    
+    public boolean matches(BeanRef template) {
+        boolean assignable = template.clazz.isAssignableFrom(this.clazz);
+        return assignable && ((template.id == null) || id.equals(template.id));
+    }
+
+    @Override
+    public int compareTo(BeanRef other) {
+        return this.id.compareTo(other.id);
+    }
+}

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java?rev=1667259&r1=1667258&r2=1667259&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java Tue Mar 17 10:57:49 2015
@@ -19,11 +19,13 @@
 package org.apache.aries.blueprint.plugin.model;
 
 import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
+import javax.enterprise.inject.Produces;
 import javax.inject.Named;
 
 import org.ops4j.pax.cdi.api.OsgiService;
@@ -32,15 +34,15 @@ import org.springframework.beans.factory
 public class Context implements Matcher {
 
     SortedSet<Bean> beans;
-    SortedSet<OsgiServiceBean> serviceRefs;
-    
+    SortedSet<OsgiServiceRef> serviceRefs;
+
     public Context(Class<?>... beanClasses) {
         this(Arrays.asList(beanClasses));
     }
 
     public Context(Collection<Class<?>> beanClasses) {
         this.beans = new TreeSet<Bean>();
-        this.serviceRefs = new TreeSet<OsgiServiceBean>();
+        this.serviceRefs = new TreeSet<OsgiServiceRef>();
         addBeans(beanClasses);
     }
 
@@ -49,6 +51,18 @@ public class Context implements Matcher
             Bean bean = new Bean(clazz);
             beans.add(bean);
             addServiceRefs(clazz);
+            addProducedBeans(clazz, bean.id);
+        }
+    }
+
+    private void addProducedBeans(Class<?> clazz, String factoryBeanId) {
+        for (Method method : clazz.getMethods()) {
+            Produces produces = method.getAnnotation(Produces.class);
+            if (produces != null) {
+                Class<?> producedClass = method.getReturnType();
+                ProducedBean producedBean = new ProducedBean(producedClass, factoryBeanId, method.getName());
+                beans.add(producedBean);
+            }
         }
     }
 
@@ -56,52 +70,37 @@ public class Context implements Matcher
         for (Field field : clazz.getDeclaredFields()) {
             OsgiService osgiService = field.getAnnotation(OsgiService.class);
             if (osgiService != null) {
-                serviceRefs.add(new OsgiServiceBean(field.getType(), osgiService));
+                serviceRefs.add(new OsgiServiceRef(field.getType(), osgiService));
             }
         }
     }
-    
+
     public void resolve() {
         for (Bean bean : beans) {
             bean.resolve(this);
         }
     }
     
-    public Bean getMatching(Field field) {
-        String destId = getDestinationId(field);
-        // TODO Replace loop by lookup
+    public BeanRef getMatching(BeanRef template) {
         for (Bean bean : beans) {
-            if (bean.matches(field.getType(), destId)) {
+            if (bean.matches(template)) {
                 return bean;
             }
         }
-        for (Bean bean : serviceRefs) {
-            if (bean.matches(field.getType(), destId)) {
+        for (BeanRef bean : serviceRefs) {
+            if (bean.matches(template)) {
                 return bean;
             }
         }
         return null;
     }
 
-	private String getDestinationId(Field field) {
-		Named named = field.getAnnotation(Named.class);
-		if (named != null) {
-			return named.value();
-		}
-		Qualifier qualifier = field.getAnnotation(Qualifier.class);
-        if (qualifier != null) {
-        	return qualifier.value();
-        }
-		return null;
-	}
-
     public SortedSet<Bean> getBeans() {
         return beans;
     }
-    
-    public SortedSet<OsgiServiceBean> getServiceRefs() {
+
+    public SortedSet<OsgiServiceRef> getServiceRefs() {
         return serviceRefs;
     }
 
-
 }

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Matcher.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Matcher.java?rev=1667259&r1=1667258&r2=1667259&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Matcher.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Matcher.java Tue Mar 17 10:57:49 2015
@@ -18,9 +18,8 @@
  */
 package org.apache.aries.blueprint.plugin.model;
 
-import java.lang.reflect.Field;
 
 
 public interface Matcher {
-    Bean getMatching(Field field);
+    BeanRef getMatching(BeanRef template);
 }

Copied: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceRef.java (from r1667047, aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceBean.java)
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceRef.java?p2=aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceRef.java&p1=aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceBean.java&r1=1667047&r2=1667259&rev=1667259&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceBean.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceRef.java Tue Mar 17 10:57:49 2015
@@ -23,11 +23,11 @@ import org.ops4j.pax.cdi.api.OsgiService
 /**
  * Synthetic bean that refers to an OSGi service
  */
-public class OsgiServiceBean extends Bean {
+public class OsgiServiceRef extends BeanRef {
 
     public String filter;
 
-    public OsgiServiceBean(Class<?> clazz, OsgiService osgiService) {
+    public OsgiServiceRef(Class<?> clazz, OsgiService osgiService) {
         super(clazz);
         filter = osgiService.filter();
     }

Added: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java?rev=1667259&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java Tue Mar 17 10:57:49 2015
@@ -0,0 +1,14 @@
+package org.apache.aries.blueprint.plugin.model;
+
+
+public class ProducedBean extends Bean {
+    public String factoryMethod;
+    public String factoryBeanId;
+    
+    public ProducedBean(Class<?> clazz, String factoryBeanId, String factoryMethod) {
+        super(clazz);
+        this.factoryBeanId = factoryBeanId;
+        this.factoryMethod = factoryMethod;
+    }
+
+}

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java?rev=1667259&r1=1667258&r2=1667259&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java Tue Mar 17 10:57:49 2015
@@ -41,7 +41,7 @@ public class Property implements Compara
     public static Property create(Matcher matcher, Field field) {
         Value value = field.getAnnotation(Value.class);
         if (needsInject(field)) {
-            Bean matching = matcher.getMatching(field);
+            BeanRef matching = matcher.getMatching(new BeanRef(field));
             String ref = (matching == null) ? getRefName(field) : matching.id;
             return new Property(field.getName(), ref, null);
         } else if (value != null){

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java?rev=1667259&r1=1667258&r2=1667259&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java Tue Mar 17 10:57:49 2015
@@ -62,7 +62,7 @@ public class BeanTest {
         assertEquals("There should be no persistence fields", 0, bean.persistenceFields.length);
         assertEquals("*", bean.transactionDef.getMethod());
         assertEquals("RequiresNew", bean.transactionDef.getType());
-        assertEquals(3, bean.properties.size());
+        assertEquals(4, bean.properties.size());
     }
     
     @Test

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java?rev=1667259&r1=1667258&r2=1667259&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java Tue Mar 17 10:57:49 2015
@@ -18,12 +18,9 @@
  */
 package org.apache.aries.blueprint.plugin.model;
 
-import java.lang.reflect.Field;
-
-import org.apache.aries.blueprint.plugin.model.Bean;
-import org.apache.aries.blueprint.plugin.model.Context;
-import org.apache.aries.blueprint.plugin.model.OsgiServiceBean;
 import org.apache.aries.blueprint.plugin.test.MyBean3;
+import org.apache.aries.blueprint.plugin.test.MyFactoryBean;
+import org.apache.aries.blueprint.plugin.test.MyProduced;
 import org.apache.aries.blueprint.plugin.test.ServiceB;
 import org.apache.aries.blueprint.plugin.test.ServiceReferences;
 import org.junit.Assert;
@@ -48,10 +45,20 @@ public class ContextTest {
     @Test
     public void testMatching() throws NoSuchFieldException, SecurityException  {
         Context context = new Context(ServiceReferences.class);
-        Field field = ServiceReferences.class.getDeclaredFields()[0];
-        Bean matching = context.getMatching(field);
-        Assert.assertEquals(OsgiServiceBean.class, matching.getClass());
+        BeanRef matching = context.getMatching(new BeanRef(ServiceB.class));
+        Assert.assertEquals(OsgiServiceRef.class, matching.getClass());
         Assert.assertEquals(ServiceB.class, matching.clazz);
         Assert.assertEquals("serviceB", matching.id);
     }
+    
+    @Test
+    public void testProduced() throws NoSuchFieldException, SecurityException  {
+        Context context = new Context(MyFactoryBean.class);
+        
+        ProducedBean matching = (ProducedBean)context.getMatching(new BeanRef(MyProduced.class));
+        Assert.assertEquals(MyProduced.class, matching.clazz);
+        Assert.assertEquals("myFactoryBean", matching.factoryBeanId);
+        Assert.assertEquals("create", matching.factoryMethod);
+    }
+    
 }

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/PropertyTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/PropertyTest.java?rev=1667259&r1=1667258&r2=1667259&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/PropertyTest.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/PropertyTest.java Tue Mar 17 10:57:49 2015
@@ -34,7 +34,7 @@ public class PropertyTest {
     public void testRefInject() throws XMLStreamException {
         Field field = TestBeanForRef.class.getDeclaredFields()[0];
         Matcher matcher = new Matcher() {
-            public Bean getMatching(Field field) {
+            public Bean getMatching(BeanRef template) {
                 return new Bean(ServiceAImpl1.class);
             }
         };
@@ -48,7 +48,7 @@ public class PropertyTest {
     public void testRefAutowired() throws XMLStreamException {
         Field field = TestBeanForRef.class.getDeclaredFields()[1];
         Matcher matcher = new Matcher() {
-            public Bean getMatching(Field field) {
+            public Bean getMatching(BeanRef template) {
                 return null;
             }
         };

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean3.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean3.java?rev=1667259&r1=1667258&r2=1667259&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean3.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean3.java Tue Mar 17 10:57:49 2015
@@ -40,4 +40,7 @@ public class MyBean3 {
 
     @Inject
     ServiceB serviceB;
+    
+    @Inject
+    MyProduced myProduced;
 }

Added: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyFactoryBean.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyFactoryBean.java?rev=1667259&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyFactoryBean.java (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyFactoryBean.java Tue Mar 17 10:57:49 2015
@@ -0,0 +1,17 @@
+package org.apache.aries.blueprint.plugin.test;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+@Singleton
+public class MyFactoryBean {
+    
+    @Inject
+    ServiceB serviceB;
+
+    @Produces
+    public MyProduced create() {
+        return new MyProduced("My message");
+    }
+}

Added: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyProduced.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyProduced.java?rev=1667259&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyProduced.java (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyProduced.java Tue Mar 17 10:57:49 2015
@@ -0,0 +1,18 @@
+package org.apache.aries.blueprint.plugin.test;
+
+import javax.inject.Inject;
+
+public class MyProduced {
+    private String message;
+    
+    @Inject
+    ServiceA serviceA;
+
+    public MyProduced(String message) {
+        this.message = message;
+    }
+    
+    public String getMessage() {
+        return message;
+    }
+}