[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