jerrypeng commented on issue #3741: POJO AvroSchema always allowNull
URL: https://github.com/apache/pulsar/issues/3741#issuecomment-469545111
 
 
   @sijie The User class is an Avro generated class based on the schema file.
   
   ```
   /**
    * Autogenerated by Avro
    *
    * DO NOT EDIT DIRECTLY
    */
   package example.avro;
   
   import org.apache.avro.specific.SpecificData;
   import org.apache.avro.message.BinaryMessageEncoder;
   import org.apache.avro.message.BinaryMessageDecoder;
   import org.apache.avro.message.SchemaStore;
   
   @SuppressWarnings("all")
   @org.apache.avro.specific.AvroGenerated
   public class User extends org.apache.avro.specific.SpecificRecordBase 
implements org.apache.avro.specific.SpecificRecord {
     private static final long serialVersionUID = -7831158737375082161L;
     public static final org.apache.avro.Schema SCHEMA$ = new 
org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"User\",\"namespace\":\"example.avro\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"favorite_number\",\"type\":[\"int\",\"null\"]},{\"name\":\"favorite_color\",\"type\":\"string\"},{\"name\":\"age\",\"type\":\"int\",\"default\":19}]}");
     public static org.apache.avro.Schema getClassSchema() { return SCHEMA$; }
   
     private static SpecificData MODEL$ = new SpecificData();
   
     private static final BinaryMessageEncoder<User> ENCODER =
         new BinaryMessageEncoder<User>(MODEL$, SCHEMA$);
   
     private static final BinaryMessageDecoder<User> DECODER =
         new BinaryMessageDecoder<User>(MODEL$, SCHEMA$);
   
     /**
      * Return the BinaryMessageDecoder instance used by this class.
      */
     public static BinaryMessageDecoder<User> getDecoder() {
       return DECODER;
     }
   
     /**
      * Create a new BinaryMessageDecoder instance for this class that uses the 
specified {@link SchemaStore}.
      * @param resolver a {@link SchemaStore} used to find schemas by 
fingerprint
      */
     public static BinaryMessageDecoder<User> createDecoder(SchemaStore 
resolver) {
       return new BinaryMessageDecoder<User>(MODEL$, SCHEMA$, resolver);
     }
   
     /** Serializes this User to a ByteBuffer. */
     public java.nio.ByteBuffer toByteBuffer() throws java.io.IOException {
       return ENCODER.encode(this);
     }
   
     /** Deserializes a User from a ByteBuffer. */
     public static User fromByteBuffer(
         java.nio.ByteBuffer b) throws java.io.IOException {
       return DECODER.decode(b);
     }
   
     @Deprecated public java.lang.CharSequence name;
     @Deprecated public java.lang.Integer favorite_number;
     @Deprecated public java.lang.CharSequence favorite_color;
     @Deprecated public int age;
   
     /**
      * Default constructor.  Note that this does not initialize fields
      * to their default values from the schema.  If that is desired then
      * one should use <code>newBuilder()</code>.
      */
     public User() {}
   
     /**
      * All-args constructor.
      * @param name The new value for name
      * @param favorite_number The new value for favorite_number
      * @param favorite_color The new value for favorite_color
      * @param age The new value for age
      */
     public User(java.lang.CharSequence name, java.lang.Integer 
favorite_number, java.lang.CharSequence favorite_color, java.lang.Integer age) {
       this.name = name;
       this.favorite_number = favorite_number;
       this.favorite_color = favorite_color;
       this.age = age;
     }
   
     public org.apache.avro.Schema getSchema() { return SCHEMA$; }
     // Used by DatumWriter.  Applications should not call.
     public java.lang.Object get(int field$) {
       switch (field$) {
       case 0: return name;
       case 1: return favorite_number;
       case 2: return favorite_color;
       case 3: return age;
       default: throw new org.apache.avro.AvroRuntimeException("Bad index");
       }
     }
   
     // Used by DatumReader.  Applications should not call.
     @SuppressWarnings(value="unchecked")
     public void put(int field$, java.lang.Object value$) {
       switch (field$) {
       case 0: name = (java.lang.CharSequence)value$; break;
       case 1: favorite_number = (java.lang.Integer)value$; break;
       case 2: favorite_color = (java.lang.CharSequence)value$; break;
       case 3: age = (java.lang.Integer)value$; break;
       default: throw new org.apache.avro.AvroRuntimeException("Bad index");
       }
     }
   
     /**
      * Gets the value of the 'name' field.
      * @return The value of the 'name' field.
      */
     public java.lang.CharSequence getName() {
       return name;
     }
   
     /**
      * Sets the value of the 'name' field.
      * @param value the value to set.
      */
     public void setName(java.lang.CharSequence value) {
       this.name = value;
     }
   
     /**
      * Gets the value of the 'favorite_number' field.
      * @return The value of the 'favorite_number' field.
      */
     public java.lang.Integer getFavoriteNumber() {
       return favorite_number;
     }
   
     /**
      * Sets the value of the 'favorite_number' field.
      * @param value the value to set.
      */
     public void setFavoriteNumber(java.lang.Integer value) {
       this.favorite_number = value;
     }
   
     /**
      * Gets the value of the 'favorite_color' field.
      * @return The value of the 'favorite_color' field.
      */
     public java.lang.CharSequence getFavoriteColor() {
       return favorite_color;
     }
   
     /**
      * Sets the value of the 'favorite_color' field.
      * @param value the value to set.
      */
     public void setFavoriteColor(java.lang.CharSequence value) {
       this.favorite_color = value;
     }
   
     /**
      * Gets the value of the 'age' field.
      * @return The value of the 'age' field.
      */
     public java.lang.Integer getAge() {
       return age;
     }
   
     /**
      * Sets the value of the 'age' field.
      * @param value the value to set.
      */
     public void setAge(java.lang.Integer value) {
       this.age = value;
     }
   
     /**
      * Creates a new User RecordBuilder.
      * @return A new User RecordBuilder
      */
     public static example.avro.User.Builder newBuilder() {
       return new example.avro.User.Builder();
     }
   
     /**
      * Creates a new User RecordBuilder by copying an existing Builder.
      * @param other The existing builder to copy.
      * @return A new User RecordBuilder
      */
     public static example.avro.User.Builder 
newBuilder(example.avro.User.Builder other) {
       return new example.avro.User.Builder(other);
     }
   
     /**
      * Creates a new User RecordBuilder by copying an existing User instance.
      * @param other The existing instance to copy.
      * @return A new User RecordBuilder
      */
     public static example.avro.User.Builder newBuilder(example.avro.User 
other) {
       return new example.avro.User.Builder(other);
     }
   
     /**
      * RecordBuilder for User instances.
      */
     public static class Builder extends 
org.apache.avro.specific.SpecificRecordBuilderBase<User>
       implements org.apache.avro.data.RecordBuilder<User> {
   
       private java.lang.CharSequence name;
       private java.lang.Integer favorite_number;
       private java.lang.CharSequence favorite_color;
       private int age;
   
       /** Creates a new Builder */
       private Builder() {
         super(SCHEMA$);
       }
   
       /**
        * Creates a Builder by copying an existing Builder.
        * @param other The existing Builder to copy.
        */
       private Builder(example.avro.User.Builder other) {
         super(other);
         if (isValidValue(fields()[0], other.name)) {
           this.name = data().deepCopy(fields()[0].schema(), other.name);
           fieldSetFlags()[0] = true;
         }
         if (isValidValue(fields()[1], other.favorite_number)) {
           this.favorite_number = data().deepCopy(fields()[1].schema(), 
other.favorite_number);
           fieldSetFlags()[1] = true;
         }
         if (isValidValue(fields()[2], other.favorite_color)) {
           this.favorite_color = data().deepCopy(fields()[2].schema(), 
other.favorite_color);
           fieldSetFlags()[2] = true;
         }
         if (isValidValue(fields()[3], other.age)) {
           this.age = data().deepCopy(fields()[3].schema(), other.age);
           fieldSetFlags()[3] = true;
         }
       }
   
       /**
        * Creates a Builder by copying an existing User instance
        * @param other The existing instance to copy.
        */
       private Builder(example.avro.User other) {
               super(SCHEMA$);
         if (isValidValue(fields()[0], other.name)) {
           this.name = data().deepCopy(fields()[0].schema(), other.name);
           fieldSetFlags()[0] = true;
         }
         if (isValidValue(fields()[1], other.favorite_number)) {
           this.favorite_number = data().deepCopy(fields()[1].schema(), 
other.favorite_number);
           fieldSetFlags()[1] = true;
         }
         if (isValidValue(fields()[2], other.favorite_color)) {
           this.favorite_color = data().deepCopy(fields()[2].schema(), 
other.favorite_color);
           fieldSetFlags()[2] = true;
         }
         if (isValidValue(fields()[3], other.age)) {
           this.age = data().deepCopy(fields()[3].schema(), other.age);
           fieldSetFlags()[3] = true;
         }
       }
   
       /**
         * Gets the value of the 'name' field.
         * @return The value.
         */
       public java.lang.CharSequence getName() {
         return name;
       }
   
       /**
         * Sets the value of the 'name' field.
         * @param value The value of 'name'.
         * @return This builder.
         */
       public example.avro.User.Builder setName(java.lang.CharSequence value) {
         validate(fields()[0], value);
         this.name = value;
         fieldSetFlags()[0] = true;
         return this;
       }
   
       /**
         * Checks whether the 'name' field has been set.
         * @return True if the 'name' field has been set, false otherwise.
         */
       public boolean hasName() {
         return fieldSetFlags()[0];
       }
   
   
       /**
         * Clears the value of the 'name' field.
         * @return This builder.
         */
       public example.avro.User.Builder clearName() {
         name = null;
         fieldSetFlags()[0] = false;
         return this;
       }
   
       /**
         * Gets the value of the 'favorite_number' field.
         * @return The value.
         */
       public java.lang.Integer getFavoriteNumber() {
         return favorite_number;
       }
   
       /**
         * Sets the value of the 'favorite_number' field.
         * @param value The value of 'favorite_number'.
         * @return This builder.
         */
       public example.avro.User.Builder setFavoriteNumber(java.lang.Integer 
value) {
         validate(fields()[1], value);
         this.favorite_number = value;
         fieldSetFlags()[1] = true;
         return this;
       }
   
       /**
         * Checks whether the 'favorite_number' field has been set.
         * @return True if the 'favorite_number' field has been set, false 
otherwise.
         */
       public boolean hasFavoriteNumber() {
         return fieldSetFlags()[1];
       }
   
   
       /**
         * Clears the value of the 'favorite_number' field.
         * @return This builder.
         */
       public example.avro.User.Builder clearFavoriteNumber() {
         favorite_number = null;
         fieldSetFlags()[1] = false;
         return this;
       }
   
       /**
         * Gets the value of the 'favorite_color' field.
         * @return The value.
         */
       public java.lang.CharSequence getFavoriteColor() {
         return favorite_color;
       }
   
       /**
         * Sets the value of the 'favorite_color' field.
         * @param value The value of 'favorite_color'.
         * @return This builder.
         */
       public example.avro.User.Builder setFavoriteColor(java.lang.CharSequence 
value) {
         validate(fields()[2], value);
         this.favorite_color = value;
         fieldSetFlags()[2] = true;
         return this;
       }
   
       /**
         * Checks whether the 'favorite_color' field has been set.
         * @return True if the 'favorite_color' field has been set, false 
otherwise.
         */
       public boolean hasFavoriteColor() {
         return fieldSetFlags()[2];
       }
   
   
       /**
         * Clears the value of the 'favorite_color' field.
         * @return This builder.
         */
       public example.avro.User.Builder clearFavoriteColor() {
         favorite_color = null;
         fieldSetFlags()[2] = false;
         return this;
       }
   
       /**
         * Gets the value of the 'age' field.
         * @return The value.
         */
       public java.lang.Integer getAge() {
         return age;
       }
   
       /**
         * Sets the value of the 'age' field.
         * @param value The value of 'age'.
         * @return This builder.
         */
       public example.avro.User.Builder setAge(int value) {
         validate(fields()[3], value);
         this.age = value;
         fieldSetFlags()[3] = true;
         return this;
       }
   
       /**
         * Checks whether the 'age' field has been set.
         * @return True if the 'age' field has been set, false otherwise.
         */
       public boolean hasAge() {
         return fieldSetFlags()[3];
       }
   
   
       /**
         * Clears the value of the 'age' field.
         * @return This builder.
         */
       public example.avro.User.Builder clearAge() {
         fieldSetFlags()[3] = false;
         return this;
       }
   
       @Override
       @SuppressWarnings("unchecked")
       public User build() {
         try {
           User record = new User();
           record.name = fieldSetFlags()[0] ? this.name : 
(java.lang.CharSequence) defaultValue(fields()[0]);
           record.favorite_number = fieldSetFlags()[1] ? this.favorite_number : 
(java.lang.Integer) defaultValue(fields()[1]);
           record.favorite_color = fieldSetFlags()[2] ? this.favorite_color : 
(java.lang.CharSequence) defaultValue(fields()[2]);
           record.age = fieldSetFlags()[3] ? this.age : (java.lang.Integer) 
defaultValue(fields()[3]);
           return record;
         } catch (java.lang.Exception e) {
           throw new org.apache.avro.AvroRuntimeException(e);
         }
       }
     }
   
     @SuppressWarnings("unchecked")
     private static final org.apache.avro.io.DatumWriter<User>
       WRITER$ = 
(org.apache.avro.io.DatumWriter<User>)MODEL$.createDatumWriter(SCHEMA$);
   
     @Override public void writeExternal(java.io.ObjectOutput out)
       throws java.io.IOException {
       WRITER$.write(this, SpecificData.getEncoder(out));
     }
   
     @SuppressWarnings("unchecked")
     private static final org.apache.avro.io.DatumReader<User>
       READER$ = 
(org.apache.avro.io.DatumReader<User>)MODEL$.createDatumReader(SCHEMA$);
   
     @Override public void readExternal(java.io.ObjectInput in)
       throws java.io.IOException {
       READER$.read(this, SpecificData.getDecoder(in));
     }
   
   }
   ```

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to