diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLine.java b/beeline/src/java/org/apache/hive/beeline/BeeLine.java index 10fd2e2..59775ad 100644 --- a/beeline/src/java/org/apache/hive/beeline/BeeLine.java +++ b/beeline/src/java/org/apache/hive/beeline/BeeLine.java @@ -79,6 +79,8 @@ import jline.FileNameCompletor; import jline.History; import jline.SimpleCompletor; +import org.apache.commons.io.ByteOrderMark; +import org.apache.commons.io.input.BOMInputStream; import org.apache.hadoop.io.IOUtils; import org.apache.commons.cli.CommandLine; @@ -753,9 +755,21 @@ int runInit() { } private int executeFile(String fileName) { - FileInputStream initStream = null; + BOMInputStream initStream = null; try { - initStream = new FileInputStream(fileName); + ByteOrderMark[] excludeBoms; + String bisVersion = BOMInputStream.class.getPackage().getSpecificationVersion(); + if("2.2".compareTo(bisVersion) > 0){ + // if commons-io library version is lower than 2.2, there is no UTF_32LE and UTF_32BE. + excludeBoms = new ByteOrderMark[]{ByteOrderMark.UTF_8, + ByteOrderMark.UTF_16LE, ByteOrderMark.UTF_16BE}; + }else{ + excludeBoms = new ByteOrderMark[]{ByteOrderMark.UTF_8, + ByteOrderMark.UTF_16LE, ByteOrderMark.UTF_16BE, + ByteOrderMark.UTF_32LE, ByteOrderMark.UTF_32BE}; + } + + initStream = new BOMInputStream(new FileInputStream(fileName), excludeBoms); return execute(getConsoleReader(initStream), true); } catch (Throwable t) { handleException(t); diff --git a/cli/pom.xml b/cli/pom.xml index 345f124..e871cbc 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -84,7 +84,6 @@ commons-io commons-io ${commons-io.version} - test jline diff --git a/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java b/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java index 3cdedba..5ce6b2c 100644 --- a/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java +++ b/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java @@ -24,6 +24,7 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.io.UnsupportedEncodingException; @@ -42,6 +43,8 @@ import jline.History; import jline.SimpleCompletor; +import org.apache.commons.io.ByteOrderMark; +import org.apache.commons.io.input.BOMInputStream; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -472,7 +475,20 @@ public int processFile(String fileName) throws IOException { BufferedReader bufferReader = null; int rc = 0; try { - bufferReader = new BufferedReader(new InputStreamReader(fs.open(path))); + ByteOrderMark[] excludeBoms; + String bisVersion = BOMInputStream.class.getPackage().getSpecificationVersion(); + if("2.2".compareTo(bisVersion) > 0){ + // if commons-io library version is lower than 2.2, there is no UTF_32LE and UTF_32BE. + excludeBoms = new ByteOrderMark[]{ByteOrderMark.UTF_8, + ByteOrderMark.UTF_16LE, ByteOrderMark.UTF_16BE}; + }else{ + excludeBoms = new ByteOrderMark[]{ByteOrderMark.UTF_8, + ByteOrderMark.UTF_16LE, ByteOrderMark.UTF_16BE, + ByteOrderMark.UTF_32LE, ByteOrderMark.UTF_32BE}; + } + + BOMInputStream bomIn = new BOMInputStream(fs.open(path), excludeBoms); + bufferReader = new BufferedReader(new InputStreamReader(bomIn)); rc = processReader(bufferReader); } finally { IOUtils.closeStream(bufferReader);