Author: dkulp
Date: Thu May 27 16:21:17 2010
New Revision: 948877

URL: http://svn.apache.org/viewvc?rev=948877&view=rev
Log:
[CXF-2829] When injecting fields, get the real object out of the proxy.

Modified:
    
cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/ResourceInjector.java
    
cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/ClassHelper.java
    
cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/SpringAopClassHelper.java

Modified: 
cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/ResourceInjector.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/ResourceInjector.java?rev=948877&r1=948876&r2=948877&view=diff
==============================================================================
--- 
cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/ResourceInjector.java
 (original)
+++ 
cxf/trunk/common/common/src/main/java/org/apache/cxf/common/injection/ResourceInjector.java
 Thu May 27 16:21:17 2010
@@ -39,6 +39,7 @@ import javax.annotation.Resources;
 import org.apache.cxf.common.annotation.AbstractAnnotationVisitor;
 import org.apache.cxf.common.annotation.AnnotationProcessor;
 import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.common.util.ClassHelper;
 import org.apache.cxf.resource.ResourceManager;
 import org.apache.cxf.resource.ResourceResolver;
 
@@ -322,7 +323,7 @@ public class ResourceInjector extends Ab
         try {
             if (field.getType().isAssignableFrom(resource.getClass())) { 
                 field.setAccessible(true); 
-                field.set(getTarget(), resource);
+                field.set(ClassHelper.getRealObject(getTarget()), resource);
             }
         } catch (IllegalAccessException e) { 
             e.printStackTrace();

Modified: 
cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/ClassHelper.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/ClassHelper.java?rev=948877&r1=948876&r2=948877&view=diff
==============================================================================
--- 
cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/ClassHelper.java
 (original)
+++ 
cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/ClassHelper.java
 Thu May 27 16:21:17 2010
@@ -45,6 +45,10 @@ public class ClassHelper {
     protected Class getRealClassFromClassInternal(Class cls) {
         return cls;
     }
+    protected Object getRealObjectInternal(Object o) {
+        return o;
+    }
+    
     
     
     public static Class getRealClass(Object o) {
@@ -54,4 +58,10 @@ public class ClassHelper {
     public static Class getRealClassFromClass(Class cls) {
         return HELPER.getRealClassFromClassInternal(cls);
     }
+    
+    public static Object getRealObject(Object o) {
+        return HELPER.getRealObjectInternal(o);
+    }
+
+    
 }

Modified: 
cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/SpringAopClassHelper.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/SpringAopClassHelper.java?rev=948877&r1=948876&r2=948877&view=diff
==============================================================================
--- 
cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/SpringAopClassHelper.java
 (original)
+++ 
cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/SpringAopClassHelper.java
 Thu May 27 16:21:17 2010
@@ -37,7 +37,21 @@ class SpringAopClassHelper extends Class
         }
         return cls;
     }
-    
+    protected Object getRealObjectInternal(Object o) {
+        if (o instanceof Advised) {
+            try {
+
+                Advised advised = (Advised)o;
+                Object target = advised.getTargetSource().getTarget();
+                //could be a proxy of a proxy.....   
+                return getRealObjectInternal(target);
+            } catch (Exception ex) {
+                // ignore
+            }
+        }
+        return o;
+    }
+
     protected Class getRealClassInternal(Object o) {
         if (AopUtils.isAopProxy(o)) {
             Advised advised = (Advised)o;


Reply via email to