--- a/jdk/src/share/classes/com/sun/jmx/mbeanserver/MBeanAnalyzer.java Sat Jul 05 23:29:16 2008 -0700
+++ b/jdk/src/share/classes/com/sun/jmx/mbeanserver/MBeanAnalyzer.java Wed Jul 09 09:56:00 2008 -0700
@@ -33,6 +33,10 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import javax.management.MBean;
+import javax.management.MXBean;
+import javax.management.ManagedAttribute;
+import javax.management.ManagedOperation;
import javax.management.NotCompliantMBeanException;
/**
@@ -125,18 +129,26 @@
for (Method m : methods) {
final String name = m.getName();
final int nParams = m.getParameterTypes().length;
+ final boolean managedOp = m.isAnnotationPresent(ManagedOperation.class);
+ final boolean managedAttr = m.isAnnotationPresent(ManagedAttribute.class);
+ if (managedOp && managedAttr) {
+ throw new NotCompliantMBeanException("Method " + name +
+ " has both @ManagedOperation and @ManagedAttribute");
+ }
final M cm = introspector.mFrom(m);
String attrName = "";
- if (name.startsWith("get"))
- attrName = name.substring(3);
- else if (name.startsWith("is")
- && m.getReturnType() == boolean.class)
- attrName = name.substring(2);
+ if (!managedOp) {
+ if (name.startsWith("get"))
+ attrName = name.substring(3);
+ else if (name.startsWith("is")
+ && m.getReturnType() == boolean.class)
+ attrName = name.substring(2);
+ }
if (attrName.length() != 0 && nParams == 0
- && m.getReturnType() != void.class) {
+ && m.getReturnType() != void.class && !managedOp) {
// It's a getter
// Check we don't have both isX and getX
AttrMethods<M> am = attrMap.get(attrName);
@@ -153,7 +165,7 @@
attrMap.put(attrName, am);
} else if (name.startsWith("set") && name.length() > 3
&& nParams == 1 &&
- m.getReturnType() == void.class) {
+ m.getReturnType() == void.class && !managedOp) {
// It's a setter
attrName = name.substring(3);
AttrMethods<M> am = attrMap.get(attrName);
@@ -166,6 +178,9 @@
}
am.setter = cm;
attrMap.put(attrName, am);
+ } else if (managedAttr) {
+ throw new NotCompliantMBeanException("Method " + name +
+ " has @ManagedAttribute but is not a valid getter or setter");
} else {
// It's an operation
List<M> cms = opMap.get(name);