This patch adds MXBean support to the fromJava translator
(possible now that javax.management.JMX is present).  It also
corrects a typo so that translation is actually used...
and squashes a bug in StandardMBean where the causal hierarchy is
broken for a reflected exception.

Changelog:

2007-04-01  Andrew John Hughes  <[EMAIL PROTECTED]>

        * gnu/javax/management/Translator.java:
        (fromJava(Object[],Method)): Use the array from the
        parameter not the newly created one...
        (fromJava(Object, Type)): Support MXBeans.
        * javax/management/JMX.java:
        (newMXBeanProxy(MBeanServerConnection,ObjectName,Class)):
        Call newMXBeanProxy rather than newMBeanProxy.
        * javax/management/StandardMBean.java:
        (setAttribute(Attribute)): Use InvocationTargetException
        as cause.

-- 
Andrew :-)

Escape the Java Trap with GNU Classpath!
http://www.gnu.org/philosophy/java-trap.html
public class gcj extends Freedom implements Java { ... }
Index: gnu/javax/management/Translator.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/javax/management/Translator.java,v
retrieving revision 1.2
diff -u -3 -p -u -r1.2 Translator.java
--- gnu/javax/management/Translator.java	5 Mar 2007 23:19:44 -0000	1.2
+++ gnu/javax/management/Translator.java	1 Apr 2007 16:26:57 -0000
@@ -39,6 +39,7 @@ package gnu.javax.management;
 
 import java.lang.reflect.Array;
 import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
 import java.lang.reflect.Type;
 
 import java.util.ArrayList;
@@ -49,6 +50,9 @@ import java.util.Set;
 import java.util.SortedMap;
 import java.util.SortedSet;
 
+import javax.management.JMX;
+import javax.management.MBeanServerInvocationHandler;
+
 import javax.management.openmbean.ArrayType;
 import javax.management.openmbean.CompositeData;
 import javax.management.openmbean.CompositeDataSupport;
@@ -88,7 +92,7 @@ public final class Translator
     Type[] gtypes = method.getGenericParameterTypes();
     Object[] otypes = new Object[jtypes.length];
     for (int a = 0; a < jtypes.length; ++a)
-      jtypes[a] = fromJava(otypes[a], (Class<?>) gtypes[a]);
+      otypes[a] = fromJava(jtypes[a], (Class<?>) gtypes[a]);
     return otypes;
   }
 
@@ -210,7 +214,28 @@ public final class Translator
 	  }
 	return data;
       }	
-    /* FIXME: Handle MXBean and other types */
+    if (JMX.isMXBeanInterface(jclass))
+      {
+	try
+	  {
+	    MBeanServerInvocationHandler ih = (MBeanServerInvocationHandler)
+	      Proxy.getInvocationHandler(jtype);
+	    return ih.getObjectName();
+	  }
+	catch (IllegalArgumentException e)
+	  {
+	    throw new IllegalArgumentException("For a MXBean to be translated " +
+					       "to an open type, it must be a " +
+					       "proxy.", e);
+	  }
+	catch (ClassCastException e)
+	  {
+	    throw new IllegalArgumentException("For a MXBean to be translated " +
+					       "to an open type, it must have a " +
+					       "MBeanServerInvocationHandler.", e);
+	  }
+      }
+    /* FIXME: Handle other types */
     throw new IllegalArgumentException("The type, " + jtype +
 				       ", is not convertible.");
   }
Index: javax/management/JMX.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/management/JMX.java,v
retrieving revision 1.1
diff -u -3 -p -u -r1.1 JMX.java
--- javax/management/JMX.java	5 Mar 2007 00:22:41 -0000	1.1
+++ javax/management/JMX.java	1 Apr 2007 16:26:58 -0000
@@ -298,7 +298,7 @@ public class JMX
   public static <T> T newMXBeanProxy(MBeanServerConnection conn,
 				     ObjectName name, Class<T> iface)
   {
-    return newMBeanProxy(conn, name, iface, false);
+    return newMXBeanProxy(conn, name, iface, false);
   }
 
   /**
Index: javax/management/StandardMBean.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/management/StandardMBean.java,v
retrieving revision 1.9
diff -u -3 -p -u -r1.9 StandardMBean.java
--- javax/management/StandardMBean.java	28 Mar 2007 21:49:21 -0000	1.9
+++ javax/management/StandardMBean.java	1 Apr 2007 16:26:58 -0000
@@ -874,8 +874,8 @@ public class StandardMBean
       }
     catch (InvocationTargetException e)
       {
-	throw new MBeanException((Exception) e.getCause(), "The getter of "
-				 + name + " threw an exception");
+	throw new MBeanException(e, "The getter of " + name +
+				 " threw an exception");
       }
   }
 

Attachment: signature.asc
Description: Digital signature

Reply via email to