summaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authorAndrew John Hughes <gnu_andrew@member.fsf.org>2007-04-01 16:34:13 +0000
committerAndrew John Hughes <gnu_andrew@member.fsf.org>2007-04-01 16:34:13 +0000
commit307da2e11dfb3d34aaf7db8e141c91c1a28e78db (patch)
tree1882c38fca14e64add282d070bf204c42fea89ac /gnu
parent3e09b88a6a2073f52ba900514c3373c531e62f29 (diff)
downloadclasspath-307da2e11dfb3d34aaf7db8e141c91c1a28e78db.tar.gz
2007-04-01 Andrew John Hughes <gnu_andrew@member.fsf.org>
* 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.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/javax/management/Translator.java29
1 files changed, 27 insertions, 2 deletions
diff --git a/gnu/javax/management/Translator.java b/gnu/javax/management/Translator.java
index e9940cf21..163fdd4fd 100644
--- a/gnu/javax/management/Translator.java
+++ b/gnu/javax/management/Translator.java
@@ -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.");
}