diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyBinary.java b/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyBinary.java index 8c594a8460..099020227a 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyBinary.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyBinary.java @@ -18,9 +18,11 @@ package org.apache.hadoop.hive.serde2.lazy; -import org.apache.commons.codec.binary.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + +import java.util.Base64; + import org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.LazyBinaryObjectInspector; import org.apache.hadoop.io.BytesWritable; @@ -54,10 +56,11 @@ public void init(ByteArrayRef bytes, int start, int length) { // todo this should be configured in serde public static byte[] decodeIfNeeded(byte[] recv) { - boolean arrayByteBase64 = Base64.isArrayByteBase64(recv); - if (LOG.isDebugEnabled() && arrayByteBase64) { - LOG.debug("Data only contains Base64 alphabets only so try to decode the data."); + try { + return Base64.getDecoder().decode(recv); + } catch (IllegalArgumentException e) { + LOG.debug("Data does not contain only Base64 characters so return original byte array"); + return recv; } - return arrayByteBase64 ? Base64.decodeBase64(recv) : recv; } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyUtils.java b/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyUtils.java index 544a668947..ad6170a9c2 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyUtils.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyUtils.java @@ -24,9 +24,9 @@ import java.nio.ByteBuffer; import java.nio.charset.CharacterCodingException; import java.util.Arrays; +import java.util.Base64; import java.util.Map; -import org.apache.commons.codec.binary.Base64; import org.apache.hadoop.hive.serde2.SerDeException; import org.apache.hadoop.hive.serde2.io.HiveCharWritable; import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable; @@ -294,7 +294,7 @@ public static void writePrimitiveUTF8(OutputStream out, Object o, BytesWritable bw = ((BinaryObjectInspector) oi).getPrimitiveWritableObject(o); byte[] toEncode = new byte[bw.getLength()]; System.arraycopy(bw.getBytes(), 0,toEncode, 0, bw.getLength()); - byte[] toWrite = Base64.encodeBase64(toEncode); + byte[] toWrite = Base64.getEncoder().encode(toEncode); out.write(toWrite, 0, toWrite.length); break; } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/lazy/fast/LazySimpleSerializeWrite.java b/serde/src/java/org/apache/hadoop/hive/serde2/lazy/fast/LazySimpleSerializeWrite.java index a42d6f4252..d7edd29f41 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/lazy/fast/LazySimpleSerializeWrite.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/lazy/fast/LazySimpleSerializeWrite.java @@ -21,11 +21,11 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.util.ArrayDeque; +import java.util.Base64; import java.util.Deque; import java.util.List; import java.util.Map; -import org.apache.commons.codec.binary.Base64; import org.apache.hadoop.hive.common.type.Date; import org.apache.hadoop.hive.serde2.io.DateWritableV2; import org.slf4j.Logger; @@ -277,7 +277,7 @@ public void writeBinary(byte[] v) throws IOException { beginPrimitive(); byte[] toEncode = new byte[v.length]; System.arraycopy(v, 0, toEncode, 0, v.length); - byte[] toWrite = Base64.encodeBase64(toEncode); + byte[] toWrite = Base64.getEncoder().encode(toEncode); output.write(toWrite, 0, toWrite.length); finishPrimitive(); } @@ -287,7 +287,7 @@ public void writeBinary(byte[] v, int start, int length) throws IOException { beginPrimitive(); byte[] toEncode = new byte[length]; System.arraycopy(v, start, toEncode, 0, length); - byte[] toWrite = Base64.encodeBase64(toEncode); + byte[] toWrite = Base64.getEncoder().encode(toEncode); output.write(toWrite, 0, toWrite.length); finishPrimitive(); } diff --git a/serde/src/test/org/apache/hadoop/hive/serde2/lazy/TestLazySimpleSerDe.java b/serde/src/test/org/apache/hadoop/hive/serde2/lazy/TestLazySimpleSerDe.java index c697dcf5c7..2b6a218e55 100644 --- a/serde/src/test/org/apache/hadoop/hive/serde2/lazy/TestLazySimpleSerDe.java +++ b/serde/src/test/org/apache/hadoop/hive/serde2/lazy/TestLazySimpleSerDe.java @@ -18,13 +18,13 @@ package org.apache.hadoop.hive.serde2.lazy; import java.io.IOException; +import java.util.Base64; import java.util.List; import java.util.Properties; import java.util.Random; -import org.apache.commons.codec.binary.Base64; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hive.serde.serdeConstants; import org.apache.hadoop.hive.serde2.ByteStream; @@ -76,7 +76,8 @@ public void testLazySimpleSerDe() throws Throwable { Text t = new Text("123\t456\t789\t1000\t5.3\thive and hadoop\t1.\tNULL\t"); t.append(new byte[]{(byte)Integer.parseInt("10111111", 2)}, 0, 1); StringBuilder sb = new StringBuilder("123\t456\t789\t1000\t5.3\thive and hadoop\t1\tNULL\t"); - String s = sb.append(new String(Base64.encodeBase64(new byte[]{(byte)Integer.parseInt("10111111", 2)}))).toString(); + String s = sb.append(Base64.getEncoder().encodeToString(new byte[] { (byte) Integer.parseInt("10111111", 2) })) + .toString(); Object[] expectedFieldsData = {new ByteWritable((byte) 123), new ShortWritable((short) 456), new IntWritable(789), new LongWritable(1000), new DoubleWritable(5.3),