如何在avro中引用java类

时间:2016-05-24 12:26:36

标签: avro

我在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'

1 个答案:

答案 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将在同一目录中查找任何导入的文件并首先解析它们。