[ https://issues.apache.org/jira/browse/LANG-754?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13215870#comment-13215870 ]
Thomas Neidhart edited comment on LANG-754 at 3/1/12 6:22 PM: -------------------------------------------------------------- I digged into this problem and the problem you describe occurs only when using setUseShortName(true), and the class is located in the default package and the name is one of [IZFJSBDC], explanation follows. The ToStringStyle uses ClassUtils to get the short name for the class, which uses an internal reverse abbreviation map to resolve primitive array types which are something like [B for a byte[]. Now there seems to be a bug in the ClassUtils.getShortName method as it does this reverse resolve all the time, and if you happen to have a class called B in the default package, it is wrongly identified as byte. was (Author: tn): I digged into this problem and the problem you describe occurs only when using setUseShortName(true), and the class is located in the default package and the name is one of [IZFJSBDC], explanation follows. The ToStringStyle uses ClassUtils to get the short name for the class, which uses an internal reverse abbreviation map to resolve primitive array types which are something like [B for a byte[]. Now there seems to be a bug in the ClassUtils.getShortName method as it does this reverse resolve all the time, and if you happen to have a class called B in the default package, it is wrongly identified as byte. So the fix would be to do the reverse lookup only in case of arrays. > embedded objects are not toString-ed like top-level objects > ----------------------------------------------------------- > > Key: LANG-754 > URL: https://issues.apache.org/jira/browse/LANG-754 > Project: Commons Lang > Issue Type: Bug > Components: lang.builder.* > Affects Versions: 2.5, 3.0.1 > Environment: Linux Ubuntu > java version "1.6.0_24" > Java(TM) SE Runtime Environment (build 1.6.0_24-b07) > Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode) > Reporter: Dominique De Vito > Priority: Minor > Original Estimate: 24h > Remaining Estimate: 24h > > I have a simple class 'A' defined as follows: > ====================================== > public class A { > int p1; > String p2; > B b; > } > ====================================== > While I execute the following instructions: > ToStringBuilder builder = new ReflectionToStringBuilder(a); > System.out.println(builder.toString()); > The output is: > A@3ea981ca[p1=0,p2=<null>,b=B@1ee7b241] > that's normal, without recursion > So, I defined my own style, for recursive toString-ing display: > ====================================== > class MyStyle extends ToStringStyle { > private final static ToStringStyle instance = new MyStyle(); > public MyStyle() { > setArrayContentDetail(true); > setUseShortClassName(true); > setUseClassName(true); > setUseIdentityHashCode(true); > setFieldSeparator(", "); > } > public static ToStringStyle getInstance() { > return instance; > }; > @Override > public void appendDetail(final StringBuffer buffer, final String fieldName, > final Object value) { > if (!value.getClass().getName().startsWith("java")) { > buffer.append(ReflectionToStringBuilder.toString(value, instance)); > } else { > super.appendDetail(buffer, fieldName, value); > } > } > @Override > public void appendDetail(final StringBuffer buffer, final String fieldName, > final Collection value) { > appendDetail(buffer, fieldName, value.toArray()); > } > } > ====================================== > When I use my custom MyStyle: > String s = ReflectionToStringBuilder.toString(a, MyStyle.getInstance()); > System.out.println(s); > The output is: > A@3ea981ca[p1=0, p2=<null>, b=byte@1ee7b241[p4=234]] > So, the name of the class 'B' is not displayed. > I expected something like: b=B@1ee7b241[p4=234] > Instead, the name of the class 'B' is replaced with 'byte'. > I don't know why. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira