[jboss-cvs] JBossAS SVN: r103535 - in projects/interceptors/trunk/jboss-interceptor/src: test/java/org/jboss/interceptors/proxy and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Apr 5 09:47:11 EDT 2010
Author: marius.bogoevici
Date: 2010-04-05 09:47:10 -0400 (Mon, 05 Apr 2010)
New Revision: 103535
Modified:
projects/interceptors/trunk/jboss-interceptor/src/main/java/org/jboss/interceptor/proxy/InterceptorProxyCreatorImpl.java
projects/interceptors/trunk/jboss-interceptor/src/test/java/org/jboss/interceptors/proxy/FirstInterceptor.java
projects/interceptors/trunk/jboss-interceptor/src/test/java/org/jboss/interceptors/proxy/FootballTeam.java
projects/interceptors/trunk/jboss-interceptor/src/test/java/org/jboss/interceptors/proxy/InterceptionTestCase.java
Log:
JBINTER-7: if a no-arg constructor is available, use it
Modified: projects/interceptors/trunk/jboss-interceptor/src/main/java/org/jboss/interceptor/proxy/InterceptorProxyCreatorImpl.java
===================================================================
--- projects/interceptors/trunk/jboss-interceptor/src/main/java/org/jboss/interceptor/proxy/InterceptorProxyCreatorImpl.java 2010-04-05 12:24:49 UTC (rev 103534)
+++ projects/interceptors/trunk/jboss-interceptor/src/main/java/org/jboss/interceptor/proxy/InterceptorProxyCreatorImpl.java 2010-04-05 13:47:10 UTC (rev 103535)
@@ -17,19 +17,18 @@
package org.jboss.interceptor.proxy;
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
import javassist.util.proxy.MethodHandler;
-import javassist.util.proxy.ProxyFactory;
import javassist.util.proxy.ProxyObject;
+import org.jboss.interceptor.InterceptorException;
import org.jboss.interceptor.model.InterceptionModel;
import org.jboss.interceptor.model.InterceptorMetadata;
import org.jboss.interceptor.registry.InterceptorRegistry;
-import org.jboss.interceptor.InterceptorException;
import org.jboss.interceptor.util.InterceptionUtils;
-import org.jboss.interceptor.util.proxy.TargetInstanceProxy;
-
-import java.lang.reflect.Constructor;
-import java.util.*;
-
import sun.reflect.ReflectionFactory;
/**
@@ -63,11 +62,25 @@
public <T> T createProxyInstance(Class<T> proxyClass, MethodHandler interceptorMethodHandler)
{
+ Constructor<T> constructor = null;
try
{
- ReflectionFactory reflectionFactory = ReflectionFactory.getReflectionFactory();
- Constructor<T> c = reflectionFactory.newConstructorForSerialization(proxyClass, Object.class.getDeclaredConstructor());
- T proxyObject = c.newInstance();
+ constructor = getNoArgConstructor(proxyClass);
+ if (constructor == null)
+ {
+ constructor = getReflectionFactoryConstructor(proxyClass);
+ }
+ }
+ catch (Exception e)
+ {
+ throw new InterceptorException(e);
+ }
+ if (constructor == null)
+ throw new InterceptorException("Cannot found a constructor for the proxy class: " + proxyClass + ". " +
+ "No no-arg constructor is available, and sun.reflect.ReflectionFactory is not accessible");
+ try
+ {
+ T proxyObject = constructor.newInstance();
if (interceptorMethodHandler != null)
{
((ProxyObject) proxyObject).setHandler(interceptorMethodHandler);
@@ -100,6 +113,39 @@
return createProxyFromInstance(target, proxyClass, new Class[0], new Object[0], targetClassMetadata);
}
+ private <T> Constructor<T> getNoArgConstructor(Class<T> clazz)
+ {
+ Constructor<T> constructor;
+ try
+ {
+ constructor = clazz.getConstructor(new Class[]{});
+ }
+ catch (NoSuchMethodException e)
+ {
+ return null;
+ }
+ return constructor;
+ }
+
+ private <T> Constructor<T> getReflectionFactoryConstructor(Class<T> proxyClass)
+ throws NoSuchMethodException
+ {
+ try
+ {
+ Constructor<T> constructor;
+ ReflectionFactory reflectionFactory = ReflectionFactory.getReflectionFactory();
+ constructor = reflectionFactory.newConstructorForSerialization(proxyClass, Object.class.getDeclaredConstructor());
+ return constructor;
+ }
+ catch (NoSuchMethodException e)
+ {
+ return null;
+ }
+ catch (SecurityException e)
+ {
+ return null;
+ }
+ }
}
Modified: projects/interceptors/trunk/jboss-interceptor/src/test/java/org/jboss/interceptors/proxy/FirstInterceptor.java
===================================================================
--- projects/interceptors/trunk/jboss-interceptor/src/test/java/org/jboss/interceptors/proxy/FirstInterceptor.java 2010-04-05 12:24:49 UTC (rev 103534)
+++ projects/interceptors/trunk/jboss-interceptor/src/test/java/org/jboss/interceptors/proxy/FirstInterceptor.java 2010-04-05 13:47:10 UTC (rev 103535)
@@ -44,4 +44,5 @@
InterceptorTestLogger.add(FirstInterceptor.class, "postConstruct");
invocationContext.proceed();
}
+
}
Modified: projects/interceptors/trunk/jboss-interceptor/src/test/java/org/jboss/interceptors/proxy/FootballTeam.java
===================================================================
--- projects/interceptors/trunk/jboss-interceptor/src/test/java/org/jboss/interceptors/proxy/FootballTeam.java 2010-04-05 12:24:49 UTC (rev 103534)
+++ projects/interceptors/trunk/jboss-interceptor/src/test/java/org/jboss/interceptors/proxy/FootballTeam.java 2010-04-05 13:47:10 UTC (rev 103535)
@@ -109,5 +109,11 @@
{
InterceptorTestLogger.add(FootballTeam.class, "postConstruct");
}
+
+ public final void doNothing()
+ {
+ int i = 0;
+ i++;
+ }
}
Modified: projects/interceptors/trunk/jboss-interceptor/src/test/java/org/jboss/interceptors/proxy/InterceptionTestCase.java
===================================================================
--- projects/interceptors/trunk/jboss-interceptor/src/test/java/org/jboss/interceptors/proxy/InterceptionTestCase.java 2010-04-05 12:24:49 UTC (rev 103534)
+++ projects/interceptors/trunk/jboss-interceptor/src/test/java/org/jboss/interceptors/proxy/InterceptionTestCase.java 2010-04-05 13:47:10 UTC (rev 103535)
@@ -371,6 +371,7 @@
interceptorRegistry.registerInterceptionModel(FootballTeam.class, interceptionModel);
FootballTeam proxy = proxifyInstance(new FootballTeam(TEAM_NAME), FootballTeam.class);
+ proxy.doNothing();
Assert.assertEquals(42, proxy.echo2(new ValueBearerImpl(1)));
}
More information about the jboss-cvs-commits
mailing list