Hi,

Thanks for reporting.
Could you file an Github issue and provide steps to reproduce this issue?

On Wed, Jun 12, 2019 at 10:54 PM [email protected]
<[email protected]> wrote:
>
> Dear experts,
>
> We are using Dubbo as service registry in our cluster.
>
> Our DTOs are mainly using Avro for serialization/deserialization.
> Fortunately, Dubbo also supports Avro serialization.
>
> However, as to provide generality in our service APIs, we use GenericRecord 
> as the DTO type to return for mainly every service method.
>
> When running, we notice that Dubbo-Serialization-Avro is only accepting to 
> serialize/deserialize SpecificRecord, the stack trace is as follows:
>
> org.apache.avro.AvroRuntimeException: Not a Specific class: class 
> org.apache.avro.generic.GenericData$Record
>         at 
> org.apache.avro.specific.SpecificData.createSchema(SpecificData.java:403)
>         at 
> org.apache.avro.reflect.ReflectData.createSchema(ReflectData.java:605)
>         at 
> org.apache.avro.specific.SpecificData$3.computeValue(SpecificData.java:335)
>         at 
> org.apache.avro.specific.SpecificData$3.computeValue(SpecificData.java:332)
>         at java.lang.ClassValue.getFromHashMap(ClassValue.java:227)
>         at java.lang.ClassValue.getFromBackup(ClassValue.java:209)
>         at java.lang.ClassValue.get(ClassValue.java:115)
>         at 
> org.apache.avro.specific.SpecificData.getSchema(SpecificData.java:346)
>         at 
> org.apache.avro.reflect.ReflectDatumWriter.<init>(ReflectDatumWriter.java:47)
>         at 
> org.apache.avro.reflect.ReflectDatumWriter.<init>(ReflectDatumWriter.java:43)
>         at 
> org.apache.dubbo.common.serialize.avro.AvroObjectOutput.writeObject(AvroObjectOutput.java:100)
>         at 
> org.apache.dubbo.rpc.protocol.dubbo.DubboCodec.encodeResponseData(DubboCodec.java:203)
>         at 
> org.apache.dubbo.remoting.exchange.codec.ExchangeCodec.encodeResponse(ExchangeCodec.java:283)
>         at 
> org.apache.dubbo.remoting.exchange.codec.ExchangeCodec.encode(ExchangeCodec.java:71)
>         at 
> org.apache.dubbo.rpc.protocol.dubbo.DubboCountCodec.encode(DubboCountCodec.java:40)
>         at 
> org.apache.dubbo.remoting.transport.netty4.NettyCodecAdapter$InternalEncoder.encode(NettyCodecAdapter.java:70)
>         at 
> io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:107)
>         at 
> io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738)
>         at 
> io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:730)
>         at 
> io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:816)
>         at 
> io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:723)
>         at 
> io.netty.handler.timeout.IdleStateHandler.write(IdleStateHandler.java:302)
>         at 
> io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738)
>         at 
> io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:730)
>         at 
> io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:816)
>         at 
> io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:723)
>         at 
> io.netty.channel.ChannelDuplexHandler.write(ChannelDuplexHandler.java:106)
>         at 
> org.apache.dubbo.remoting.transport.netty4.NettyServerHandler.write(NettyServerHandler.java:100)
>         at 
> io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738)
>         at 
> io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:730)
>         at 
> io.netty.channel.AbstractChannelHandlerContext.access$1900(AbstractChannelHandlerContext.java:38)
>         at 
> io.netty.channel.AbstractChannelHandlerContext$AbstractWriteTask.write(AbstractChannelHandlerContext.java:1081)
>         at 
> io.netty.channel.AbstractChannelHandlerContext$WriteAndFlushTask.write(AbstractChannelHandlerContext.java:1128)
>         at 
> io.netty.channel.AbstractChannelHandlerContext$AbstractWriteTask.run(AbstractChannelHandlerContext.java:1070)
>         at 
> io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
>         at 
> io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
>         at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:465)
>         at 
> io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
>         at 
> io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
>         at java.lang.Thread.run(Thread.java:748)
>
> We wonder if there is any solution to allow the serialization of 
> GenericRecord?
>
> Best regards
> Tien Dat PHAN



-- 
Best Regards!
Huxing

Reply via email to