Details
-
Improvement
-
Status: Open
-
Minor
-
Resolution: Unresolved
-
None
-
None
-
Operating System: All
Platform: All
-
21483
Description
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)
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(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("}");
} else if (ConvertUtils.lookup(value.getClass()) != null)
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
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("]");
} else
}
return (sb.toString());
}
Attachments
Attachments
Issue Links
- is related to
-
BEANUTILS-212 [beanutils] Generic implementations of toString, hashCode, equals() for DynaBean and DynaClass
- Open