So basically I get a stackoverflow with these two exceptions. I have to
stop/kill the server to stop them.

I think the problem is in ValueProxyCategory. It calls the function
hashCode() and this calls
AutoBeanUtils.getAllProperties(bean).hashCode();This retrieves all
properties as a Map and then calculates the hashcode for
each element. However because I have a cyclic dependency between Term and
Term2Term it will go into an infinite loop.

Caused by: java.lang.reflect.InvocationTargetException

    at sun.reflect.GeneratedMethodAccessor88.invoke(Unknown Source)
    at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at 
com.google.web.bindery.autobean.vm.impl.BeanMethod$5.invoke(BeanMethod.java:155)
    at 
com.google.web.bindery.autobean.vm.impl.BeanMethod$1.invoke(BeanMethod.java:44)
    at 
com.google.web.bindery.autobean.vm.impl.SimpleBeanHandler.invoke(SimpleBeanHandler.java:43)
    at 
com.google.web.bindery.autobean.vm.impl.ShimHandler.hashCode(ShimHandler.java:66)
    at sun.reflect.GeneratedMethodAccessor77.invoke(Unknown Source)
    at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at 
com.google.web.bindery.autobean.vm.impl.ShimHandler.invoke(ShimHandler.java:76)
    at java.util.HashMap$Entry.hashCode(HashMap.java:818)
    at java.util.AbstractMap.hashCode(AbstractMap.java:494)
    at 
com.google.web.bindery.requestfactory.shared.impl.ValueProxyCategory.hashCode(ValueProxyCategory.java:55)



On Wed, Nov 28, 2012 at 11:24 AM, Thomas Broyer <[email protected]> wrote:

> Is there a "Caused by" for this UndeclaredThrowableException?
>
>
> On Wednesday, November 28, 2012 10:41:34 AM UTC+1, Ümit Seren wrote:
>>
>> I am not sure if this is a known issue. But I recently tried to map some JPA2
>> Entities to ValueProxy's and run into a weird issue.
>>
>> In the database I have a table (Term) which references itself using an
>> intermediate/mapping table (basically building a graph like structure).
>>
>> Term ---> Term2Term.parent
>> Term <--- Term2Term.child
>>
>> Basically a record from table A can have n childrin and exactly one
>> parent (DAG).
>>
>> The ValueProxy's look like this:
>>
>>
>> @ProxyForName(value="xxxxx")
>> public interface TermProxy extends ValueProxy {
>>     public Integer getId();
>>     ......
>>     public Set<Term2TermProxy> getParents();
>>     public Set<Term2TermProxy> getChilds();
>> }
>>
>>
>> @ProxyForName(value="xxxx")
>> public interface Term2TermProxy extends ValueProxy {
>>
>>     public Integer getId();
>>     public TermProxy getParent();
>>
>>     public TermProxy getChild();
>>
>> }
>>
>> Furthermore I have an EntityProxy in which one Term is embedded:
>>
>>
>> @ProxyForName(xxx)
>> public interface SomeEntityProxy extends EntityProxy{
>>     TermProxy getTraitOntologyTerm();
>>
>> }
>>
>> When I load the SomeEntityProxy object and also load the TermProxy I run
>> into an infinite loop on the backend/server when serializing the payload
>> with following exception:
>>
>> java.lang.reflect.**UndeclaredThrowableException
>>     at $Proxy118.hashCode(Unknown Source)
>>     at 
>> com.google.web.bindery.**autobean.vm.impl.ShimHandler.**hashCode(ShimHandler.java:66)
>>     at sun.reflect.**NativeMethodAccessorImpl.**invoke0(Native Method)
>>     at 
>> sun.reflect.**NativeMethodAccessorImpl.**invoke(**NativeMethodAccessorImpl.java:**57)
>>     at 
>> sun.reflect.**DelegatingMethodAccessorImpl.**invoke(**DelegatingMethodAccessorImpl.**java:43)
>>     at java.lang.reflect.Method.**invoke(Method.java:601)
>>     at 
>> com.google.web.bindery.**autobean.vm.impl.ShimHandler.**invoke(ShimHandler.java:76)
>>     at $Proxy118.hashCode(Unknown Source)
>>     at java.util.HashMap.hash(**HashMap.java:351)
>>     at java.util.HashMap.put(HashMap.**java:471)
>>     at java.util.HashSet.add(HashSet.**java:217)
>>     at 
>> com.google.web.bindery.**requestfactory.server.**Resolver.resolveClientValue(**Resolver.java:637)
>>     at 
>> com.google.web.bindery.**requestfactory.server.**Resolver.access$400(Resolver.**java:51)
>>     at 
>> com.google.web.bindery.**requestfactory.server.**Resolver$PropertyResolver.**visitReferenceProperty(**Resolver.java:140)
>>     at 
>> com.google.web.bindery.**autobean.shared.**AutoBeanVisitor.**visitCollectionProperty(**AutoBeanVisitor.java:229)
>>     at 
>> com.google.web.bindery.**autobean.vm.impl.**ProxyAutoBean.**traverseProperties(**ProxyAutoBean.java:300)
>>     at 
>> com.google.web.bindery.**autobean.shared.impl.**AbstractAutoBean.traverse(**AbstractAutoBean.java:166)
>>     at 
>> com.google.web.bindery.**autobean.shared.impl.**AbstractAutoBean.accept(**AbstractAutoBean.java:101)
>>     at 
>> com.google.web.bindery.**requestfactory.server.**Resolver.resolveClientValue(**Resolver.java:414)
>>
>> I suspect that this is due to the fact that ValueProxy's don't have an
>> identity and on the backend it traverse through all properties of my
>> entity. However by having a reference from Term2Term back to Term I can
>> end up with a cyclic dependency.
>>
>> i.e. Term A -> Term2Term.parent -> Term B -> Term2Term.child -> Term A
>>
>> If I break one of the relationships (parent or child) from Term to
>> Term2Term it serializes fine. However when I adda nother ValueProxy (Term A
>> -> SomeValueProxy -> Term A ) that contains a property which maps back to
>> the Term, I again get a stackoverflow however this time on the client.
>>
>> I guess switching to EntityProxy would solve the problem as the
>> properties don't automatically get serialized and for identity the
>> stableId is used.
>>
>  --
> You received this message because you are subscribed to the Google Groups
> "Google Web Toolkit" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/google-web-toolkit/-/aH5oLo02k7kJ.
>
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/google-web-toolkit?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to