You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Kengo Seki (Jira)" <ji...@apache.org> on 2020/03/09 00:35:00 UTC

[jira] [Commented] (AVRO-2723) Avro Java: Obtaining default field values for POJO objects with ReflectData

    [ https://issues.apache.org/jira/browse/AVRO-2723?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17054576#comment-17054576 ] 

Kengo Seki commented on AVRO-2723:
----------------------------------

bq. should I add implementation for `ReflectData.AllowDefaults` (please see class DefaultReflector above) ?

That sounds good to me. But I'm not sure if {{AllowDefaults}} is a suitable name, because users can also specify default values using the {{AvroDefault}} annotations instead of that class. So {{UseInitialValueAsDefault}} or something might be more precise?

bq. Make another PR to improve the documentation, right?

Yes please, that's very helpful! And before that, would you file a corresponding JIRA issue and explain how to reproduce those errors first?
Because I didn't see them when I ran {{mvn javadoc:aggregate}} in a Docker container, though many warnings were shown as follows. Maybe you're using Java 11?

{code}
~/avro$ ./build.sh docker

(snip)

sekikn@07b11f942aed:~/avro$ mvn javadoc:aggregate

(snip)

48 warnings
[WARNING] Javadoc Warnings
[WARNING] /home/sekikn/avro/lang/java/avro/src/main/java/org/apache/avro/message/BinaryMessageEncoder.java:54: warning - Tag @link: can't find encode(D) in org.apache.avro.message.BinaryMessageEncoder
[WARNING] /home/sekikn/avro/lang/java/avro/src/main/java/org/apache/avro/message/BinaryMessageEncoder.java:76: warning - Tag @link: can't find encode(D) in org.apache.avro.message.BinaryMessageEncoder
[WARNING] /home/sekikn/avro/lang/java/avro/src/main/java/org/apache/avro/message/RawMessageEncoder.java:58: warning - Tag @link: can't find encode(D) in org.apache.avro.message.RawMessageEncoder
[WARNING] /home/sekikn/avro/lang/java/avro/src/main/java/org/apache/avro/message/RawMessageEncoder.java:80: warning - Tag @link: can't find encode(D) in org.apache.avro.message.RawMessageEncoder
[WARNING] /home/sekikn/avro/lang/java/avro/src/main/java/org/apache/avro/reflect/MapEntry.java:34: warning - Tag @link: reference not found: Map.Entry
[WARNING] /home/sekikn/avro/lang/java/compiler/src/main/java/org/apache/avro/compiler/schema/SchemaVisitor.java:32: warning - @return tag has no arguments.
[WARNING] /home/sekikn/avro/lang/java/compiler/src/main/java/org/apache/avro/compiler/schema/SchemaVisitor.java:40: warning - @return tag has no arguments.
[WARNING] /home/sekikn/avro/lang/java/compiler/src/main/java/org/apache/avro/compiler/schema/SchemaVisitor.java:48: warning - @return tag has no arguments.
[WARNING] /home/sekikn/avro/lang/java/compiler/src/main/java/org/apache/avro/compiler/specific/SpecificCompiler.java:813: warning - @Deprecated is an unknown tag -- same as a known tag except for case.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java:86: warning - @parameter is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java:94: warning - @parameter is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java:102: warning - @parameter is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java:110: warning - @parameter is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java:119: warning - @parameter is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java:128: warning - @parameter is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java:137: warning - @parameter is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java:146: warning - @parameter is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java:154: warning - @parameter is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java:164: warning - @parameter is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java:171: warning - @parameter is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java:180: warning - @parameter is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java:180: warning - @readonly is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java:180: warning - @required is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/target/generated-sources/plugin/org/apache/avro/mojo/HelpMojo.java:29: warning - @goal is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/target/generated-sources/plugin/org/apache/avro/mojo/HelpMojo.java:29: warning - @requiresProject is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/target/generated-sources/plugin/org/apache/avro/mojo/HelpMojo.java:29: warning - @threadSafe is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/IDLProtocolMojo.java:44: warning - @goal is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/IDLProtocolMojo.java:44: warning - @requiresDependencyResolution is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/IDLProtocolMojo.java:44: warning - @phase is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/IDLProtocolMojo.java:44: warning - @threadSafe is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/InduceMojo.java:42: warning - @goal is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/InduceMojo.java:42: warning - @phase is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/InduceMojo.java:42: warning - @threadSafe is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/InduceMojo.java:88: warning - @parameter is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/InduceMojo.java:88: warning - @readonly is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/InduceMojo.java:88: warning - @required is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/ProtocolMojo.java:39: warning - @goal is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/ProtocolMojo.java:39: warning - @phase is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/ProtocolMojo.java:39: warning - @requiresDependencyResolution is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/ProtocolMojo.java:39: warning - @threadSafe is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/SchemaMojo.java:39: warning - @goal is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/SchemaMojo.java:39: warning - @phase is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/SchemaMojo.java:39: warning - @requiresDependencyResolution is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/SchemaMojo.java:39: warning - @threadSafe is an unknown tag.
[WARNING] /home/sekikn/avro/lang/java/mapred/src/main/java/org/apache/avro/mapred/tether/TetherJob.java:94: warning - @return tag has no arguments.
[WARNING] /home/sekikn/avro/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroSequenceFile.java:80: warning - Tag @link: reference not found: org.apache.hadoop.io.Serialization
[WARNING] /home/sekikn/avro/lang/java/avro/src/main/java/org/apache/avro/reflect/MapEntry.java:34: warning - Tag @link: reference not found: Map.Entry
[WARNING] /home/sekikn/avro/lang/java/avro/src/main/java/org/apache/avro/reflect/MapEntry.java:34: warning - Tag @link: reference not found: Map.Entry
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Apache Avro Toplevel ............................... SUCCESS [ 54.226 s]
[INFO] Apache Avro Java ................................... SKIPPED
[INFO] Apache Avro ........................................ SKIPPED
[INFO] Apache Avro Compiler ............................... SKIPPED
[INFO] Apache Avro Maven Plugin ........................... SKIPPED
[INFO] Apache Avro IPC .................................... SKIPPED
[INFO] Apache Avro IPC Jetty .............................. SKIPPED
[INFO] Apache Avro IPC Netty .............................. SKIPPED
[INFO] Trevni Java ........................................ SKIPPED
[INFO] Trevni Java Core ................................... SKIPPED
[INFO] Apache Avro Mapred API ............................. SKIPPED
[INFO] Trevni Java Avro ................................... SKIPPED
[INFO] Trevni Specification ............................... SKIPPED
[INFO] Apache Avro Tools .................................. SKIPPED
[INFO] Apache Avro Protobuf Compatibility ................. SKIPPED
[INFO] Apache Avro Thrift Compatibility ................... SKIPPED
[INFO] Apache Avro Maven Archetypes ....................... SKIPPED
[INFO] Apache Avro Maven Service Archetype ................ SKIPPED
[INFO] Apache Avro gRPC ................................... SKIPPED
[INFO] Avro Integration Tests ............................. SKIPPED
[INFO] Apache Avro Codegen Test dependencies .............. SKIPPED
[INFO] Apache Avro Codegen Test ........................... SKIPPED
[INFO] Apache Avro Performance Test Suite ................. SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 58.184 s
[INFO] Finished at: 2020-03-08T13:55:47+00:00
[INFO] Final Memory: 194M/2844M
[INFO] ------------------------------------------------------------------------
{code}

> Avro Java: Obtaining default field values for POJO objects with ReflectData
> ---------------------------------------------------------------------------
>
>                 Key: AVRO-2723
>                 URL: https://issues.apache.org/jira/browse/AVRO-2723
>             Project: Apache Avro
>          Issue Type: New Feature
>          Components: java
>    Affects Versions: 1.9.1
>            Reporter: Andy Le
>            Priority: Critical
>         Attachments: Screen Shot 2020-03-08 at 16.13.29.png
>
>
> Hi guys,
>  
> I've got a simple app using Avro Reflection:
>  
> {code:java}
> public class App {
>   public static void main(String[] args) {
>     testReflection();
>   }
>   static class User {
>     public String first = "Andy";
>     public String last = "Le";
>   }
>   static void testReflection(){
>     // get the reflected schema for packets
>     Schema schema = ReflectData.AllowNull.get().getSchema(User.class);
>     System.out.println(schema.toString(true));
>   }
> {code}
> The output on console will be:
> {noformat}
> {
>   "type" : "record",
>   "name" : "User",
>   "namespace" : "App",
>   "fields" : [ {
>     "name" : "first",
>     "type" : [ "null", "string" ],
>     "default" : null
>   }, {
>     "name" : "last",
>     "type" : [ "null", "string" ],
>     "default" : null
>   } ]
> }
> {noformat}
>  
> As you can see, there's no default values for fields. Would you please tell me how to obtain such values?
> Thank you.
>  
>  
>  
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)