[ https://issues.apache.org/jira/browse/LANG-456?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12633948#action_12633948 ]
Sebb commented on LANG-456: --------------------------- Thanks for the updated test case which causes the expected stack overflow. In fact LANG is currently targeted at Java 1.2 - I believe it may be used by Java ME code, which is not so easily upgraded. == Since the HashCode for the Bidirectional class depends on the hash code for the JavBVO class and vice versa, it's not surprising that there is a stack overflow. If you were not using the HashCodeBuider, how would you define the hashcodes? > HashCodeBuilder throws StackOverflowError in bidirectional navigable > association > -------------------------------------------------------------------------------- > > Key: LANG-456 > URL: https://issues.apache.org/jira/browse/LANG-456 > Project: Commons Lang > Issue Type: Bug > Affects Versions: 2.4 > Environment: Widows XP. Sun JDK 1.5 or 1.6. > Reporter: Bob Fields > Attachments: HashCodeBuilderStackOverflow.zip, StackOverflowError.zip > > > This is not the reflection methods, it is the regular HashCodeBuilder append > methods. It causes EqualsBuilder, ToStringBuilder, CompareToBuilder to also > throw the StackOverflowException, but those methods work when one of the > HashCodeBuilder bidirectional association attributes .hashCode() is commented > out. The problem is that all of the builders call registerObject() which > creates a hashCode, but only the reflectionAppend method checks if an object > is registered. > Bi-directional associations are a very common pattern in Jaxb and Hibernate. > In this case, I generate code from a model in order to avoid the reflection > penalty - I already know what the attributes are at compile time, so I use > .append instead of .reflectionAppend. > See attached example + unit test. One side of the bidirectional association > must be commented out in the hashCode method. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.