You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by dk...@apache.org on 2018/12/03 19:48:09 UTC

[avro] branch master updated: AVRO-1939: Add commandline tool that outputs canonical form of schema

This is an automated email from the ASF dual-hosted git repository.

dkulp pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/avro.git


The following commit(s) were added to refs/heads/master by this push:
     new d9d9587  AVRO-1939: Add commandline tool that outputs canonical form of schema
d9d9587 is described below

commit d9d95871441b015353429585baa3ae821fdb39c1
Author: Erik Forsberg <fo...@opera.com>
AuthorDate: Mon Oct 24 14:13:15 2016 +0200

    AVRO-1939: Add commandline tool that outputs canonical form of schema
---
 .../src/main/java/org/apache/avro/tool/Main.java   |  3 +-
 .../apache/avro/tool/SchemaNormalizationTool.java  | 47 ++++++++++++++++++++++
 2 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/lang/java/tools/src/main/java/org/apache/avro/tool/Main.java b/lang/java/tools/src/main/java/org/apache/avro/tool/Main.java
index 962abe4..3d488b2 100644
--- a/lang/java/tools/src/main/java/org/apache/avro/tool/Main.java
+++ b/lang/java/tools/src/main/java/org/apache/avro/tool/Main.java
@@ -61,7 +61,8 @@ public class Main {
         new TetherTool(),
         new TrevniCreateRandomTool(),
         new TrevniMetadataTool(),
-        new TrevniToJsonTool()
+        new TrevniToJsonTool(),
+        new SchemaNormalizationTool()
         }) {
       Tool prev = tools.put(tool.getName(), tool);
       if (prev != null) {
diff --git a/lang/java/tools/src/main/java/org/apache/avro/tool/SchemaNormalizationTool.java b/lang/java/tools/src/main/java/org/apache/avro/tool/SchemaNormalizationTool.java
new file mode 100644
index 0000000..1cd63c7
--- /dev/null
+++ b/lang/java/tools/src/main/java/org/apache/avro/tool/SchemaNormalizationTool.java
@@ -0,0 +1,47 @@
+package org.apache.avro.tool;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.util.List;
+
+import joptsimple.OptionParser;
+
+import joptsimple.OptionSet;
+import org.apache.avro.Schema;
+import org.apache.avro.SchemaNormalization;
+
+public class SchemaNormalizationTool implements Tool {
+  @Override
+  public String getName() { return "schemacanonical"; }
+
+  @Override
+  public String getShortDescription() { return "Converts an Avro Schema to its canonical form"; }
+
+  @Override
+  public int run(InputStream stdin, PrintStream out, PrintStream err, List<String> args) throws Exception {
+    OptionParser p = new OptionParser();
+    OptionSet opts = p.parse(args.toArray(new String[0]));
+
+    if (opts.nonOptionArguments().size() != 2) {
+      err.println("Expected 2 args: infile outfile (filenames or '-' for stdin/stdout)");
+      p.printHelpOn(err);
+      return 1;
+    }
+
+    BufferedInputStream inStream = Util.fileOrStdin(args.get(0), stdin);
+    BufferedOutputStream outStream = Util.fileOrStdout(args.get(1), out);
+
+    Schema schema = new Schema.Parser().parse(inStream);
+
+    String canonicalForm = SchemaNormalization.toParsingForm(schema);
+
+    outStream.write(canonicalForm.getBytes());
+
+    Util.close(inStream);
+    Util.close(outStream);
+
+    return 0;
+  }
+}