2016-05-24 16 views
0

Ich habe ClassA In Java erstellt, die einige benutzerdefinierte Annotation hat, die ich einen Teil des AVRO-Datensatzes nicht erstellen kann. Ich möchte Protokoll RPC in avro definieren, um die benutzerdefinierte Java-Klasse zurückzugeben.So verweisen Sie auf Java-Klasse in Avro

Etwas wie:

@namespace("org.test.avro.service") protocol TestService { 
org.test.avro.domain.ClassA methodA(); } 

Es sagt org.apache.avro.compiler.idl.ParseException: Nicht definierte Name 'org.test.avro.domain.ClassA'

Antwort

0

Sie benötigen, um Stellen Sie Ihre Java-Klasse als Avro-Datensatz dar, um sie in Avro-Definitionen zu verwenden. Wenn die Klasse und der Dienst denselben Namespace verwenden, kann der Datensatz in der gleichen Protokolldefinition definiert werden. Da Ihr Namespace jedoch einen anderen Namespace hat, definieren Sie ihn in einer separaten AVDL-Datei.

Dann importieren Sie es in Ihr TestService-Protokoll.

@namespace("org.test.avro.service") protocol TestService { 

    import idl "dependency.avdl"; 

    org.test.avro.domain.ClassA methodA(); } 

Wenn Sie mit new Idl(testservice.avdl) zu analysieren versuchen, werden Avro für alle importierten Dateien in demselben Verzeichnis suchen und sie zuerst analysieren.

Verwandte Themen