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]

Reply via email to