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

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

bq. this calls SpecificRecord.newRecord without the instance of the class being 
copied.

I think we should add a method that takes a Class to instantiate, like 
{{SpecificRecord#newRecord(Class, Schema)}}. Then update {{deepCopy}} to use 
that to create instances instead of {{newRecord(Object,Schema)}}. If we have an 
instance of the class, we should always use it instead of using a reflected one 
because of this issue.

> 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, 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