[ 
https://issues.apache.org/jira/browse/AVRO-1620?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14241913#comment-14241913
 ] 

Ryan Blue commented on AVRO-1620:
---------------------------------

Thanks! It's great to see some tests for this and I think you're right that 
it's a bug.

I'm wondering if there isn't an easier way of fixing it than making sure the 
SpecificData instance's ClassLoader matches the one for the record that is 
begin copied. Shouldn't deepCopy use the class of the record that was passed in 
rather than resolving the class in a ClassLoader? If we have an instance, then 
we should be able to get the class object and use it. That would simplify the 
patch quite a bit.

> Classloader Differences When Copying Records Results in ClassCastException
> --------------------------------------------------------------------------
>
>                 Key: AVRO-1620
>                 URL: https://issues.apache.org/jira/browse/AVRO-1620
>             Project: Avro
>          Issue Type: Bug
>          Components: java
>    Affects Versions: 1.7.7
>            Reporter: Allan Shoup
>         Attachments: AVRO-1620.patch
>
>
> Similar to the situation described in AVRO-1240, a parent classloader 
> contains the avro classes and a separate classloader contains the avro 
> specific record classes. When using the generated 
> {code}
> newBuilder(SpecificRecord other)
> {code}
> or 
> {code}
> newBuilder(SpecificRecord.Builder other)
> {code}
> methods to duplicate records, the generated code will cause an exception 
> similar to this:
> {noformat}
> Caused by: java.lang.ClassCastException: 
> org.apache.avro.generic.GenericData$Record cannot be cast to 
> my.specific.Record
>       at my.specific.Record$Builder.<init>(Record.java:149)
>       at my.specific.Record$Builder.<init>(Record.java:121)
>       at my.specific.Record.newBuilder(Record.java:115)
>       ... 19 more
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to