Uploaded image for project: 'Apache Avro'
  1. Apache Avro
  2. AVRO-983

maven-avro-plugin: Allow maven schema compiler to support external reference in an another avro schema file

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Won't Fix
    • 1.6.1
    • None
    • java
    • None
    • Reviewed

    Description

      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 :

       
      [
      	{
      		"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" }
      			]
      	}
      ]
      

      generate a fatal error :

       
      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)
      

      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);

      Attachments

        1. AVRO-983.patch
          2 kB
          Thomas White
        2. AVRO-983.patch
          0.9 kB
          Thomas White
        3. SchemaMojo.java.patch
          4 kB
          Cédric Torcq

        Issue Links

          Activity

            People

              tomwhite Thomas White
              torcq Cédric Torcq
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - 0.25h
                  0.25h
                  Remaining:
                  Remaining Estimate - 0.25h
                  0.25h
                  Logged:
                  Time Spent - Not Specified
                  Not Specified