You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ff...@apache.org on 2007/05/18 13:12:47 UTC

svn commit: r539386 - in /incubator/cxf/trunk/common/common/src: main/java/org/apache/cxf/common/annotation/ main/java/org/apache/cxf/common/injection/ test/java/org/apache/cxf/common/injection/

Author: ffang
Date: Fri May 18 04:12:46 2007
New Revision: 539386

URL: http://svn.apache.org/viewvc?view=rev&rev=539386
Log:
[CXF-654] Inherited @Resource annotated fields/methods declared not injected

Modified:
    incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/annotation/AnnotationProcessor.java
    incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/ResourceInjector.java
    incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/common/injection/ResourceInjectorTest.java

Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/annotation/AnnotationProcessor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/annotation/AnnotationProcessor.java?view=diff&rev=539386&r1=539385&r2=539386
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/annotation/AnnotationProcessor.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/annotation/AnnotationProcessor.java Fri May 18 04:12:46 2007
@@ -84,25 +84,34 @@
         
         annotationTypes = visitor.getTargetAnnotations();
         visitor.setTarget(target);
-        processClass(visitor);
-        processFields(visitor); 
-        processMethods(visitor);
+        //recursively check annotation in super class
+        processClass(visitor, target.getClass());
+        processFields(visitor, target.getClass()); 
+        processMethods(visitor, target.getClass());
     } 
     
     
-    private void processMethods(AnnotationVisitor visitor) {
-        
-        visitAnnotatedElement(target.getClass().getMethods(), visitor, visitMethodMethod); 
+    private void processMethods(AnnotationVisitor visitor, Class<? extends Object> targetClass) {
+
+        if (targetClass.getSuperclass() != null) {
+            processMethods(visitor, targetClass.getSuperclass());
+        }
+        visitAnnotatedElement(targetClass.getDeclaredMethods(), visitor, visitMethodMethod); 
     }
     
-    private void processFields(AnnotationVisitor visitor) { 
-        
-        visitAnnotatedElement(target.getClass().getDeclaredFields(), visitor, visitFieldMethod); 
+    private void processFields(AnnotationVisitor visitor, Class<? extends Object> targetClass) { 
+        if (targetClass.getSuperclass() != null) {
+            processFields(visitor, targetClass.getSuperclass());
+        }
+        visitAnnotatedElement(targetClass.getDeclaredFields(), visitor, visitFieldMethod); 
     } 
     
     
-    private void processClass(AnnotationVisitor visitor) {
-        Class<?>[] classes = {target.getClass()}; 
+    private void processClass(AnnotationVisitor visitor, Class<? extends Object> targetClass) {
+        if (targetClass.getSuperclass() != null) {
+            processClass(visitor, targetClass.getSuperclass());
+        }
+        Class<?>[] classes = {targetClass}; 
         visitAnnotatedElement(classes, visitor, visitClassMethod);
     }
     

Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/ResourceInjector.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/ResourceInjector.java?view=diff&rev=539386&r1=539385&r2=539386
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/ResourceInjector.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/ResourceInjector.java Fri May 18 04:12:46 2007
@@ -234,6 +234,7 @@
 
     private void invokeSetter(Method method, Object resource) { 
         try {
+            method.setAccessible(true);
             method.invoke(getTarget(), resource);
         } catch (IllegalAccessException e) { 
             LOG.log(Level.SEVERE, "INJECTION_SETTER_NOT_VISIBLE", method);

Modified: incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/common/injection/ResourceInjectorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/common/injection/ResourceInjectorTest.java?view=diff&rev=539386&r1=539385&r2=539386
==============================================================================
--- incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/common/injection/ResourceInjectorTest.java (original)
+++ incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/common/injection/ResourceInjectorTest.java Fri May 18 04:12:46 2007
@@ -38,8 +38,8 @@
 
 public class ResourceInjectorTest extends Assert {
     private static final String RESOURCE_ONE = "resource one";
-    private static final String RESOURCE_TWO = "resource one";
-
+    private static final String RESOURCE_TWO = "resource two";
+    
     private ResourceInjector injector; 
         
     public void setUpResourceManager(String pfx) { 
@@ -63,6 +63,18 @@
         setUpResourceManager(FieldTarget.class.getCanonicalName() + "/");
         doInjectTest(new FieldTarget()); 
     }
+    
+    @Test
+    public void testFieldInSuperClassInjection() { 
+        setUpResourceManager("org.apache.cxf.common.injection.FieldTarget/");
+        doInjectTest(new SubFieldTarget()); 
+    }
+    
+    @Test
+    public void testSetterInSuperClassInjection() {
+        setUpResourceManager("org.apache.cxf.common.injection.SetterTarget/");
+        doInjectTest(new SubSetterTarget()); 
+    }
 
     @Test
     public void testSetterInjection() {
@@ -116,7 +128,8 @@
 interface Target {
     String getResource1(); 
     String getResource2(); 
-} 
+}
+
 
 class FieldTarget implements Target {
 
@@ -140,6 +153,13 @@
 
 }
 
+class SubFieldTarget extends FieldTarget {
+}
+
+class SubSetterTarget extends SetterTarget {
+    
+}
+
 class SetterTarget implements Target { 
 
     private String resource1;
@@ -163,7 +183,7 @@
     }
     
     @Resource(name = "resource2")
-    public final void setResource2(final String argResource2) {
+    private void setResource2(final String argResource2) {
         this.resource2 = argResource2;
     }
 
@@ -201,6 +221,7 @@
     // dummy method to access the private methods to avoid compile warnings
     public void dummyMethod() {
         preDestroyMethodPrivate();
+        setResource2("");
     }
 }