[ http://issues.apache.org/jira/browse/BEANUTILS-172?page=all ]
Henri Yandell updated BEANUTILS-172: ------------------------------------ Bugzilla Id: (was: 21483) Fix Version/s: 1.8.0 I think this should be considered for in 1.8.0 - it seems simple enough. > [beanutils] BeanUtils and PropertyUtils toString function (code included) > ------------------------------------------------------------------------- > > Key: BEANUTILS-172 > URL: http://issues.apache.org/jira/browse/BEANUTILS-172 > Project: Commons BeanUtils > Issue Type: Improvement > Environment: Operating System: All > Platform: All > Reporter: Ryan Barker > Priority: Minor > Fix For: 1.8.0 > > Attachments: BeanToStringBuilder.java > > > 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()); > } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]