Avro is a relatively new module contributed by community users. I am not 
familiar with its usage and code too.

File an issue to look for help might be an effective way.

Jun

> On Jun 13, 2019, at 10:27 AM, Huxing Zhang <[email protected]> wrote:
> 
> 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