DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=21483>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=21483 BeanUtils and PropertyUtils toString function (code included) Summary: BeanUtils and PropertyUtils toString function (code included) Product: Commons Version: unspecified Platform: All OS/Version: All Status: NEW Severity: Enhancement Priority: Other Component: Bean Utilities AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] I thought it would be nice if there was an easy way to have a toString function that would take a bean and output a string, as writing toString functions for the BeanUtils class gets old fast. So I went and wrote one based off the toString function for org.apache.struts.action.DynaActionForm. The following function will output the contents of a bean in a very verbose manner. I would suggest that this version is suitable for PropertyUtils, while a BeanUtils version would not have the code blocks for the verbose List, Array and Map strings. This code uses recursion to handle nested beans. Feel free to email me regarding this code //////////////////////////////////////////////// // Code Start //////////////////////////////////////////////// public static String toString(Object value) { if (value == null) { return "<NULL>"; } StringBuffer sb = new StringBuffer(); if (value.getClass().isArray()) { // verbose array output int n = Array.getLength(value); sb.append("{"); for (int j = 0; j < n; j++) { if (j > 0) { sb.append(','); } sb.append(toString(Array.get(value, j))); } sb.append("}"); } else if (value instanceof List) { // verbose list output int n = ((List) value).size(); sb.append("{"); for (Iterator j=((List) value).iterator(); j.hasNext(); ) { sb.append(toString(j.next())); if (j.hasNext()) { sb.append(','); } } sb.append("}"); } else if (value instanceof Map) { // verbose map output Iterator j = ((Map) value).entrySet().iterator(); sb.append("{"); while (j.hasNext()) { Map.Entry e = (Map.Entry) j.next(); sb.append(e.getKey()); sb.append('='); sb.append(toString(e.getValue())); if (j.hasNext()) { sb.append(','); } } sb.append("}"); } else if (ConvertUtils.lookup(value.getClass()) != null) { // use the convertutils for this parameter sb.append(ConvertUtils.convert(value)); } else { // check if this class has a toString method declared anywhere for it Method toStringMethod = MethodUtils.getAccessibleMethod(value.getClass(),"toString",new Class [0]); if (toStringMethod == null || toStringMethod.getDeclaringClass().getName().equals("java.lang.Object")) { // its a bean! sb.append("[className="); sb.append(value.getClass().getName()); // find its properties Map props = null; try { props = PropertyUtils.describe(value); } catch (Exception e) { sb.append("<EXCEPTION>"); } // and print them if (props != null) { for (Iterator i=props.entrySet().iterator(); i.hasNext(); ) { Map.Entry entry = (Map.Entry) i.next(); Object entryValue = entry.getValue(); // dont print the class name twice if (!(entryValue instanceof Class)) { sb.append(','); sb.append(entry.getKey()); sb.append('='); sb.append(toString(entry.getValue())); } } } sb.append("]"); } else { // use the normal toString method sb.append(value.toString()); } } return (sb.toString()); } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
