Author: ningjiang
Date: Wed Oct 3 22:42:29 2007
New Revision: 581781
URL: http://svn.apache.org/viewvc?rev=581781&view=rev
Log:
CXF-1074 using the spring's AOPUtils.getTargetClass() as the resource injector
target class.
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
incubator/cxf/trunk/rt/frontend/jaxws/pom.xml
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServerFactoryBean.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?rev=581781&r1=581780&r2=581781&view=diff
==============================================================================
---
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
Wed Oct 3 22:42:29 2007
@@ -74,9 +74,9 @@
* Visits each of the annotated elements of the object.
*
* @param visitor a visitor
- *
+ * @param claz the Class of the targe object
*/
- public void accept(AnnotationVisitor visitor) {
+ public void accept(AnnotationVisitor visitor, Class<?> claz) {
if (visitor == null) {
throw new IllegalArgumentException();
@@ -85,10 +85,14 @@
annotationTypes = visitor.getTargetAnnotations();
visitor.setTarget(target);
//recursively check annotation in super class
- processClass(visitor, target.getClass());
- processFields(visitor, target.getClass());
- processMethods(visitor, target.getClass());
+ processClass(visitor, claz);
+ processFields(visitor, claz);
+ processMethods(visitor, claz);
}
+
+ public void accept(AnnotationVisitor visitor) {
+ accept(visitor, target.getClass());
+ }
private void processMethods(AnnotationVisitor visitor, Class<? extends
Object> targetClass) {
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?rev=581781&r1=581780&r2=581781&view=diff
==============================================================================
---
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
Wed Oct 3 22:42:29 2007
@@ -52,6 +52,7 @@
private static final List<Class<? extends Annotation>> ANNOTATIONS =
new ArrayList<Class<? extends Annotation>>();
+
static {
ANNOTATIONS.add(Resource.class);
ANNOTATIONS.add(Resources.class);
@@ -71,11 +72,13 @@
}
- public void inject(Object o) {
-
+ public void inject(Object o) {
+ inject(o, o.getClass());
+ }
+
+ public void inject(Object o, Class claz) {
AnnotationProcessor processor = new AnnotationProcessor(o);
- processor.accept(this);
-
+ processor.accept(this, claz);
invokePostConstruct();
}
@@ -377,4 +380,5 @@
private Object resolveResource(String resourceName, Class<?> type) {
return resourceManager.resolveResource(resourceName, type,
resourceResolvers);
}
+
}
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?rev=581781&r1=581780&r2=581781&view=diff
==============================================================================
---
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
Wed Oct 3 22:42:29 2007
@@ -19,7 +19,8 @@
package org.apache.cxf.common.injection;
-
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
@@ -29,6 +30,10 @@
import javax.annotation.Resource;
import javax.annotation.Resources;
+import net.sf.cglib.proxy.Enhancer;
+import net.sf.cglib.proxy.MethodInterceptor;
+import net.sf.cglib.proxy.MethodProxy;
+
import org.apache.cxf.resource.ResourceManager;
import org.apache.cxf.resource.ResourceResolver;
@@ -64,6 +69,7 @@
doInjectTest(new FieldTarget());
}
+
@Test
public void testFieldInSuperClassInjection() {
setUpResourceManager("org.apache.cxf.common.injection.FieldTarget/");
@@ -81,6 +87,12 @@
setUpResourceManager(SetterTarget.class.getCanonicalName() + "/");
doInjectTest(new SetterTarget());
}
+
+ @Test
+ public void testProxyInjection() {
+ setUpResourceManager(FieldTarget.class.getCanonicalName() + "/");
+ doInjectTest(getProxyObject());
+ }
@Test
public void testClassLevelInjection() {
@@ -111,15 +123,23 @@
assertTrue(target.preDestroyCalled());
}
- protected void doInjectTest(Target target) {
-
- injector.inject(target);
+ protected void doInjectTest(Target target) {
+ injector.inject(target);
assertNotNull(target.getResource1());
assertEquals(RESOURCE_ONE, target.getResource1());
assertNotNull(target.getResource2());
- assertEquals(RESOURCE_TWO, target.getResource2());
+ assertEquals(RESOURCE_TWO, target.getResource2());
+
+ }
+
+
+ private FieldTarget getProxyObject() {
+ Enhancer e = new Enhancer();
+ e.setSuperclass(FieldTarget.class);
+ e.setCallback(new CallInterceptor());
+ return (FieldTarget)e.create();
}
}
@@ -130,6 +150,17 @@
String getResource2();
}
+class CallInterceptor implements MethodInterceptor {
+
+ public Object intercept(Object obj, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
+ Object retValFromSuper = null;
+ if (!Modifier.isAbstract(method.getModifiers())) {
+ retValFromSuper = proxy.invokeSuper(obj, args);
+ }
+ return retValFromSuper;
+ }
+}
+
class FieldTarget implements Target {
@@ -228,7 +259,8 @@
@Resource(name = "resource1")
class ClassTarget implements Target {
- @Resource(name = "resource2") public String resource2foo;
+ @Resource(name = "resource2")
+ public String resource2foo;
private String res1;
public final void setResource1(String res) {
Modified: incubator/cxf/trunk/rt/frontend/jaxws/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/pom.xml?rev=581781&r1=581780&r2=581781&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/pom.xml (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/pom.xml Wed Oct 3 22:42:29 2007
@@ -107,6 +107,11 @@
</dependency>
<dependency>
<groupId>org.springframework</groupId>
+ <artifactId>spring-aop</artifactId>
+ <version>${spring.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<scope>test</scope>
<version>${spring.version}</version>
Modified:
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServerFactoryBean.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServerFactoryBean.java?rev=581781&r1=581780&r2=581781&view=diff
==============================================================================
---
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServerFactoryBean.java
(original)
+++
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServerFactoryBean.java
Wed Oct 3 22:42:29 2007
@@ -45,6 +45,8 @@
import org.apache.cxf.service.invoker.Invoker;
import org.apache.cxf.service.model.BindingInfo;
+import org.springframework.aop.support.AopUtils;
+
/**
* Bean to help easily create Server endpoints for JAX-WS. Example:
* <pre>
@@ -196,7 +198,7 @@
resourceManager = new DefaultResourceManager(resolvers);
resourceManager.addResourceResolver(new
WebServiceContextResourceResolver());
ResourceInjector injector = new ResourceInjector(resourceManager);
- injector.inject(instance);
+ injector.inject(instance, AopUtils.getTargetClass(instance));
}
}
}