2016-05-24 1 views
0

У меня есть ClassA Создан в java, который имеет некоторые пользовательские аннотации, которые я не могу создать часть записи avro. Я хотел бы определить протокол rpc в avro, чтобы вернуть пользовательский класс java.Как ссылаться на класс java в avro

Что-то вроде:

@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

Вам нужно представляйте свой 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 будет выглядеть в той же директории для любых импортируемых файлов и анализировать их первым.