[ 
https://issues.apache.org/jira/browse/BEANUTILS-172?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Niall Pemberton updated BEANUTILS-172:
--------------------------------------

    Fix Version/s:     (was: 1.8.0)
                   LATER THAN 1.8.0

I'm against adding Commons Lang as a dependency to BeanUtils for this. If it 
can be done without Commons Lang then I don't mind - otherwise we should close 
this as WONTFIX

> [beanutils] BeanUtils and PropertyUtils toString function (code included)
> -------------------------------------------------------------------------
>
>                 Key: BEANUTILS-172
>                 URL: https://issues.apache.org/jira/browse/BEANUTILS-172
>             Project: Commons BeanUtils
>          Issue Type: Improvement
>          Components: Bean / Property Utils
>         Environment: Operating System: All
> Platform: All
>            Reporter: Ryan Barker
>            Priority: Minor
>             Fix For: LATER THAN 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.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to