Author: chirino
Date: Wed Dec 16 20:34:30 2009
New Revision: 891418

URL: http://svn.apache.org/viewvc?rev=891418&view=rev
Log:
better error handling.

Modified:
    
activemq/sandbox/activemq-apollo-actor/activemq-dispatcher/src/main/java/org/apache/activemq/actor/AsmActor.java

Modified: 
activemq/sandbox/activemq-apollo-actor/activemq-dispatcher/src/main/java/org/apache/activemq/actor/AsmActor.java
URL: 
http://svn.apache.org/viewvc/activemq/sandbox/activemq-apollo-actor/activemq-dispatcher/src/main/java/org/apache/activemq/actor/AsmActor.java?rev=891418&r1=891417&r2=891418&view=diff
==============================================================================
--- 
activemq/sandbox/activemq-apollo-actor/activemq-dispatcher/src/main/java/org/apache/activemq/actor/AsmActor.java
 (original)
+++ 
activemq/sandbox/activemq-apollo-actor/activemq-dispatcher/src/main/java/org/apache/activemq/actor/AsmActor.java
 Wed Dec 16 20:34:30 2009
@@ -18,18 +18,24 @@
 
 public class AsmActor implements Opcodes {
 
-    public static <T> T create(Class<T> interfaceClass, T target, 
DispatchQueue queue) throws Exception {
+    public static <T> T create(Class<T> interfaceClass, T target, 
DispatchQueue queue) throws IllegalArgumentException {
         return create(target.getClass().getClassLoader(), interfaceClass, 
target, queue);
     }
     
-    public static <T> T create(ClassLoader classLoader, Class<T> 
interfaceClass, T target, DispatchQueue queue) throws Exception {
+    public static <T> T create(ClassLoader classLoader, Class<T> 
interfaceClass, T target, DispatchQueue queue) throws IllegalArgumentException {
         Class<T> proxyClass = getProxyClass(classLoader, interfaceClass);
         Constructor<?> constructor = proxyClass.getConstructors()[0];
-        return proxyClass.cast(constructor.newInstance(new Object[]{target, 
queue}));
+        Object rc;
+        try {
+            rc = constructor.newInstance(new Object[]{target, queue});
+        } catch (Throwable e) {
+            throw new RuntimeException("Could not create an instance of the 
proxy due to: "+e.getMessage(), e);
+        }
+        return proxyClass.cast(rc);
     }
     
     @SuppressWarnings("unchecked")
-    private static <T> Class<T> getProxyClass(ClassLoader loader, Class<T> 
interfaceClass) throws Exception {
+    private static <T> Class<T> getProxyClass(ClassLoader loader, Class<T> 
interfaceClass) throws IllegalArgumentException {
         String proxyName = proxyName(interfaceClass);
         try {
             return (Class<T>) loader.loadClass(proxyName);
@@ -56,17 +62,21 @@
         private String proxyName;
         private String interfaceName;
     
-        private Generator(ClassLoader loader, Class<T> interfaceClass) throws 
SecurityException, NoSuchMethodException {
+        private Generator(ClassLoader loader, Class<T> interfaceClass) throws 
RuntimeException {
             this.loader = loader;
             this.interfaceClass = interfaceClass;
             this.proxyName = proxyName(interfaceClass).replace('.', '/');
             this.interfaceName = interfaceClass.getName().replace('.','/');
             
-            defineClassMethod = 
java.lang.ClassLoader.class.getDeclaredMethod("defineClass", new Class[] { 
String.class, byte[].class, int.class, int.class });
-            defineClassMethod.setAccessible(true);
+            try {
+                defineClassMethod = 
java.lang.ClassLoader.class.getDeclaredMethod("defineClass", new Class[] { 
String.class, byte[].class, int.class, int.class });
+                defineClassMethod.setAccessible(true);
+            } catch (Throwable e) {
+                throw new RuntimeException("Could not access the 
'java.lang.ClassLoader.defineClass' method due to: "+e.getMessage(), e);
+            }
         }
     
-        private Class<T> generate() throws Exception {
+        private Class<T> generate() throws IllegalArgumentException {
             
             // Define all the runnable classes used for each method.
             Method[] methods = interfaceClass.getMethods();
@@ -82,11 +92,17 @@
         }
         
         @SuppressWarnings("unchecked")
-        private Class<T> defineClass(String name, byte[] classBytes) throws 
IllegalArgumentException, IllegalAccessException, InvocationTargetException {
-            return (Class<T>) defineClassMethod.invoke(loader, new Object[] 
{name, classBytes, 0, classBytes.length});
+        private Class<T> defineClass(String name, byte[] classBytes) throws 
RuntimeException {
+            try {
+                return (Class<T>) defineClassMethod.invoke(loader, new 
Object[] {name, classBytes, 0, classBytes.length});
+            } catch (IllegalAccessException e) {
+                throw new RuntimeException("Could not define the generated 
class due to: "+e.getMessage(), e);
+            } catch (InvocationTargetException e) {
+                throw new RuntimeException("Could not define the generated 
class due to: "+e.getMessage(), e);
+            }
         }
         
-        public byte[] dumpProxy(Method[] methods) throws Exception {
+        public byte[] dumpProxy(Method[] methods) {
             ClassWriter cw = new ClassWriter(COMPUTE_FRAMES);
             FieldVisitor fv;
             MethodVisitor mv;
@@ -215,7 +231,7 @@
             return value;
         }
     
-        public byte[] dumpRunnable(int index, Method method) throws Exception {
+        public byte[] dumpRunnable(int index, Method method) {
     
             ClassWriter cw = new ClassWriter(COMPUTE_FRAMES);
             FieldVisitor fv;


Reply via email to