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

Java: ReflectData incorrectly handles hidden fields

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.9.2
    • 1.10.0
    • java
    • None

    Description

      Hi guys,

      I've got the following test:

      public ReflectTest{
        public class Definition {
          public Map<String, Type> tokens;
        }
      
        public enum Type {
          A,
          B,
          C
        }
      
        @Test
        public void testAvro2805() {
          Schema schema = ReflectData.get().getSchema(Definition.class);
      
          final String schemaString = schema.toString(true);
      
          System.out.println(schemaString);
        }
      
      }
      

      When I ran the test, an exception is raised:

      org.apache.avro.SchemaParseException: Illegal character in: this$0
      
      	at org.apache.avro.Schema.validateName(Schema.java:1530)
      	at org.apache.avro.Schema.access$400(Schema.java:87)
      	at org.apache.avro.Schema$Field.<init>(Schema.java:518)
      	at org.apache.avro.Schema$Field.<init>(Schema.java:557)
      	at org.apache.avro.reflect.ReflectData.createSchema(ReflectData.java:683)
      	at org.apache.avro.specific.SpecificData$3.computeValue(SpecificData.java:335)
      	at org.apache.avro.specific.SpecificData$3.computeValue(SpecificData.java:332)
      

      From the log, you may see that: we should not handle Java hidden field `this$0` which is used to hold reference to outer class instances.

      This issue is somehow related to this one

      Attachments

        Issue Links

          Activity

            People

              anhldbk Andy Le
              anhldbk Andy Le
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: