[ https://issues.apache.org/jira/browse/AVRO-1939?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16707701#comment-16707701 ]
ASF GitHub Bot commented on AVRO-1939: -------------------------------------- dkulp closed pull request #144: AVRO-1939: Add commandline tool that outputs canonical form of schema URL: https://github.com/apache/avro/pull/144 This is a PR merged from a forked repository. As GitHub hides the original diff on merge, it is displayed below for the sake of provenance: As this is a foreign pull request (from a fork), the diff is supplied below (as it won't show otherwise due to GitHub magic): diff --git a/lang/java/avro/src/main/java/org/apache/avro/SchemaNormalization.java b/lang/java/avro/src/main/java/org/apache/avro/SchemaNormalization.java index 16d264258..cf8323992 100644 --- a/lang/java/avro/src/main/java/org/apache/avro/SchemaNormalization.java +++ b/lang/java/avro/src/main/java/org/apache/avro/SchemaNormalization.java @@ -24,8 +24,8 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -/** Collection of static methods for generating the cannonical form of - * schemas (see {@link #toParsingForm}) -- and fingerprints of cannonical +/** Collection of static methods for generating the canonical form of + * schemas (see {@link #toParsingForm}) -- and fingerprints of canonical * forms ({@link #fingerprint}). */ public class SchemaNormalization { 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 93c827ccd..7a82f41d2 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 @@ 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 000000000..1cd63c710 --- /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; + } +} ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > Add command line tool for generating canonical form of schema > ------------------------------------------------------------- > > Key: AVRO-1939 > URL: https://issues.apache.org/jira/browse/AVRO-1939 > Project: Apache Avro > Issue Type: Improvement > Reporter: Erik Forsberg > Priority: Major > Fix For: 1.9.0 > > > Being able to generate canonical form of schemas from avro-tools would be > useful, especially when writing canonical schema support in other languages > (i.e AVRO-1938). -- This message was sent by Atlassian JIRA (v7.6.3#76005)