maven-avro-plugin: Allow maven schema compiler to support external reference in
an another avro schema file
-----------------------------------------------------------------------------------------------------------
Key: AVRO-983
URL: https://issues.apache.org/jira/browse/AVRO-983
Project: Avro
Issue Type: Improvement
Components: java
Affects Versions: 1.6.1
Reporter: Cédric Torcq
Avro Maven plugin doesn't support an external reference in an another Avro
schema file even this schema is available in the same src directory
Example :
{code:javascript}
[
{
"namespace": "com.afklm.karma.demand.inter",
"name": "DatedFlightLegInterType",
"type": "record",
"fields":
[
{ "name": "legOrgArp", "type": "string" },
{ "name": "legDestArp", "type": "string" },
{ "name": "legDepDate", "type": "long" },
{ "name": "flightNb", "type": "string" },
{ "name": "dfl", "type":
"com.afklm.karma.demand.output.DatedFlightLegType" }
]
},
{
"namespace": "com.afklm.karma.demand.inter",
"name": "AirportAirportDatedFlightLegInterType",
"type": "record",
"fields":
[
{ "name": "aa", "type":
"AirportAirportInterType" },
{ "name": "legOrgArp", "type": "string" },
{ "name": "legDestArp", "type": "string" },
{ "name": "legDepDate", "type": "long" },
{ "name": "flightNb", "type": "string" }
]
}
]
{code}
generate a fatal error :
{code}
org.apache.avro.SchemaParseException:
"com.afklm.karma.demand.output.DatedFlightLegType" is not a defined name. The
type of t
he "dfl" field must be a defined name or a {"type": ...} expression.
at org.apache.avro.Schema.parse(Schema.java:1131)
at org.apache.avro.Schema.parse(Schema.java:1200)
at org.apache.avro.Schema$Parser.parse(Schema.java:968)
at org.apache.avro.Schema$Parser.parse(Schema.java:945)
at org.apache.avro.mojo.SchemaMojo.doCompile(SchemaMojo.java:58)
at
org.apache.avro.mojo.AbstractAvroMojo.compileFiles(AbstractAvroMojo.java:137)
at
org.apache.avro.mojo.AbstractAvroMojo.execute(AbstractAvroMojo.java:107)
{code}
I propose a patch to support also this case :
In org.apache.avro.mojo.SchemaMojo (line 55):
// File src = new File(sourceDirectory, filename);
// Schema.Parser parser = new Schema.Parser();
// Schema schema = parser.parse(src);
// SpecificCompiler compiler = new SpecificCompiler(schema);
// compiler.setTemplateDir(templateDirectory);
// compiler.setStringType(StringType.valueOf(stringType));
// compiler.compileSchema(src,
// outputDirectory);
DirectoryScanner scanner = new DirectoryScanner();
scanner.setBasedir(sourceDirectory);
scanner.setIncludes( getIncludes() );
scanner.addDefaultExcludes();
scanner.scan();
File[] avroFiles = new File[scanner.getIncludedFiles().length];
for (int i = 0; i < avroFiles.length; i++) {
avroFiles[i] = new File( scanner.getBasedir(),
scanner.getIncludedFiles()[i] );
}
SpecificCompiler.compileSchema(avroFiles, outputDirectory);
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira