Date: 2004-09-21T07:59:48 Editor: KrisSchneider <[EMAIL PROTECTED]> Wiki: Apache Struts Wiki Page: ExposedBeanProperties URL: http://wiki.apache.org/struts/ExposedBeanProperties
no comment New Page: ##language:en #pragma section-numbers off 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'''. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]