You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@dubbo.apache.org by Ian Luo <ia...@gmail.com> on 2019/07/08 07:49:11 UTC

Re: Dubbo-Serialization-Avro failed to serialize GenericRecord

Pls. file an issue together with your reproducer, so that we can reproduce.

Thanks,
-Ian.

On Wed, Jun 12, 2019 at 10:54 PM tphan.dat@gmail.com <tp...@gmail.com>
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
>