我在Java中创建了ClassA,它有一些自定义注释,我无法创建avro记录的一部分。我想在avro中定义协议rpc以返回自定义java类。
类似的东西:
@namespace("org.test.avro.service") protocol TestService {
org.test.avro.domain.ClassA methodA(); }
它说org.apache.avro.compiler.idl.ParseException:未定义的名称' org.test.avro.domain.ClassA'
答案 0 :(得分:0)
您需要将您的Java类表示为Avro记录,以便在Avro定义中使用它。如果类和服务共享相同的名称空间,则可以在同一协议定义中定义记录,但由于您的名称空间不同,因此请在单独的avdl文件中定义它。
@namespace("org.test.avro.domain") protocol TestServiceDependency {
record org.test.avro.domain.ClassA {
int fieldA; } }
然后将其导入TestService协议。
@namespace("org.test.avro.service") protocol TestService {
import idl "dependency.avdl";
org.test.avro.domain.ClassA methodA(); }
当您尝试使用new Idl(testservice.avdl)
进行解析时,Avro将在同一目录中查找任何导入的文件并首先解析它们。