DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
Here's a utility class that will dump information about a bean's exposed properties:
import java.beans.*;
import java.io.*;
import java.util.*;
public class SimpleBeanDumper {
public static void dump(Class beanClass) throws IntrospectionException {
dump(beanClass, new PrintWriter(System.out, true));
}
public static void dump(Class beanClass, PrintWriter out) throws IntrospectionException {
if (beanClass == null) {
throw new NullPointerException("No bean class specified");
}
if (out == null) {
out = new PrintWriter(System.out, true);
}
out.println("Dumping Properties for: " + beanClass.getName());
out.println();
BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
for (int i = 0, n = descriptors.length; i < n; i++) {
PropertyDescriptor descriptor = descriptors[i];
String propName = descriptor.getName();
out.println(propName);
out.println(" propertyType: " + descriptor.getPropertyType());
out.println(" readMethod: " + descriptor.getReadMethod());
out.println(" writeMethod: " + descriptor.getWriteMethod());
if (descriptor instanceof IndexedPropertyDescriptor) {
IndexedPropertyDescriptor indexedDescriptor = (IndexedPropertyDescriptor)descriptor;
out.println(" indexedPropertyType: " + indexedDescriptor.getIndexedPropertyType());
out.println(" indexedReadMethod: " + indexedDescriptor.getIndexedReadMethod());
out.println(" indexedWriteMethod: " + indexedDescriptor.getIndexedWriteMethod());
}
}
}
public static void main(String[] args) throws Exception {
Class clazz = MyBean.class;
if (args.length > 0) {
clazz = Class.forName(args[0]);
}
dump(clazz);
}
public static class MyBean implements Serializable {
public int getID() { return 0; }
public void setID(int id) {}
public String getId() { return null; }
public void setId(String id) {}
public String[] getFriends() { return null; }
public String getFriends(int i) { return null; }
public void setFriends(String[] friends) {}
public void setFriends(int i, String friend) {}
public Map getMap() { return null; }
public void setMap(Map map) {}
}
}
If the class is run as:
java SimpleBeanDumper
Then the output should look something like:
Dumping Properties for: SimpleBeanDumper$MyBean ID propertyType: int readMethod: public int SimpleBeanDumper$MyBean.getID() writeMethod: public void SimpleBeanDumper$MyBean.setID(int) class propertyType: class java.lang.Class readMethod: public final native java.lang.Class java.lang.Object.getClass() writeMethod: null friends propertyType: class [Ljava.lang.String; readMethod: public java.lang.String[] SimpleBeanDumper$MyBean.getFriends() writeMethod: public void SimpleBeanDumper$MyBean.setFriends(java.lang.String[]) indexedPropertyType: class java.lang.String indexedReadMethod: public java.lang.String SimpleBeanDumper$MyBean.getFriends(int) indexedWriteMethod: public void SimpleBeanDumper$MyBean.setFriends(int,java.lang.String) id propertyType: class java.lang.String readMethod: public java.lang.String SimpleBeanDumper$MyBean.getId() writeMethod: public void SimpleBeanDumper$MyBean.setId(java.lang.String) map propertyType: interface java.util.Map readMethod: public java.util.Map SimpleBeanDumper$MyBean.getMap() writeMethod: public void SimpleBeanDumper$MyBean.setMap(java.util.Map)
In other words, a SimpleBeanDumper.MyBean instance exposes five properties: ID, class, friends, id, and map. Note that while most of the properties can be both read and written, the class property is read-only. Also note that the class property is actually inherited from java.lang.Object.
Here's another dump example, this time using java.util.HashMap:
java SimpleBeanDumper java.util.HashMap
The output should look something like:
Dumping Properties for: java.util.HashMap class propertyType: class java.lang.Class readMethod: public final native java.lang.Class java.lang.Object.getClass() writeMethod: null empty propertyType: boolean readMethod: public boolean java.util.AbstractMap.isEmpty() writeMethod: null
In other words, a HashMap instance exposes two simple read-only properties called class and empty.