You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jv...@apache.org on 2010/09/20 23:39:49 UTC

svn commit: r999126 - in /hadoop/hive/trunk: CHANGES.txt contrib/src/java/org/apache/hadoop/hive/contrib/fileformat/base64/Base64TextInputFormat.java contrib/src/java/org/apache/hadoop/hive/contrib/fileformat/base64/Base64TextOutputFormat.java

Author: jvs
Date: Mon Sep 20 21:39:48 2010
New Revision: 999126

URL: http://svn.apache.org/viewvc?rev=999126&view=rev
Log:
HIVE-1628. Fix Base64TextInputFormat to be compatible with commons
codec 1.4
(Todd Lipcon via jvs)


Modified:
    hadoop/hive/trunk/CHANGES.txt
    hadoop/hive/trunk/contrib/src/java/org/apache/hadoop/hive/contrib/fileformat/base64/Base64TextInputFormat.java
    hadoop/hive/trunk/contrib/src/java/org/apache/hadoop/hive/contrib/fileformat/base64/Base64TextOutputFormat.java

Modified: hadoop/hive/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/CHANGES.txt?rev=999126&r1=999125&r2=999126&view=diff
==============================================================================
--- hadoop/hive/trunk/CHANGES.txt (original)
+++ hadoop/hive/trunk/CHANGES.txt Mon Sep 20 21:39:48 2010
@@ -141,6 +141,10 @@ Trunk -  Unreleased
     HIVE-558. Make describe output better
     (Thiruvel Thirumoolan via namit)
 
+    HIVE-1628. Fix Base64TextInputFormat to be compatible with commons
+    codec 1.4
+    (Todd Lipcon via jvs)
+
   OPTIMIZATIONS
 
   BUG FIXES

Modified: hadoop/hive/trunk/contrib/src/java/org/apache/hadoop/hive/contrib/fileformat/base64/Base64TextInputFormat.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/contrib/src/java/org/apache/hadoop/hive/contrib/fileformat/base64/Base64TextInputFormat.java?rev=999126&r1=999125&r2=999126&view=diff
==============================================================================
--- hadoop/hive/trunk/contrib/src/java/org/apache/hadoop/hive/contrib/fileformat/base64/Base64TextInputFormat.java (original)
+++ hadoop/hive/trunk/contrib/src/java/org/apache/hadoop/hive/contrib/fileformat/base64/Base64TextInputFormat.java Mon Sep 20 21:39:48 2010
@@ -21,6 +21,8 @@ package org.apache.hadoop.hive.contrib.f
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.util.Arrays;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
 
 import org.apache.commons.codec.binary.Base64;
 import org.apache.hadoop.hive.shims.ShimLoader;
@@ -125,7 +127,7 @@ public class Base64TextInputFormat imple
     }
 
     private byte[] signature;
-    private final Base64 base64 = new Base64();
+    private final Base64 base64 = createBase64();
 
     @Override
     public void configure(JobConf job) {
@@ -140,6 +142,7 @@ public class Base64TextInputFormat imple
         e.printStackTrace();
       }
     }
+
   }
 
   TextInputFormat format;
@@ -174,4 +177,28 @@ public class Base64TextInputFormat imple
     ShimLoader.getHadoopShims().inputFormatValidateInput(format, job);
   }
 
+  /**
+   * Workaround an incompatible change from commons-codec 1.3 to 1.4.
+   * Since Hadoop has this jar on its classpath, we have no way of knowing
+   * which version we are running against.
+   */
+  static Base64 createBase64() {
+    try {
+      // This constructor appeared in 1.4 and specifies that we do not want to
+      // line-wrap or use any newline separator
+      Constructor<Base64> ctor = Base64.class.getConstructor(int.class, byte[].class);
+      return ctor.newInstance(0, null);
+    } catch (NoSuchMethodException e) { // ie we are running 1.3
+      // In 1.3, this constructor has the same behavior, but in 1.4 the default
+      // was changed to add wrapping and newlines.
+      return new Base64();
+    } catch (InstantiationException e) {
+      throw new RuntimeException(e);
+    } catch (IllegalAccessException e) {
+      throw new RuntimeException(e);
+    } catch (InvocationTargetException e) {
+      throw new RuntimeException(e.getCause());
+    }
+  }
+
 }

Modified: hadoop/hive/trunk/contrib/src/java/org/apache/hadoop/hive/contrib/fileformat/base64/Base64TextOutputFormat.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/contrib/src/java/org/apache/hadoop/hive/contrib/fileformat/base64/Base64TextOutputFormat.java?rev=999126&r1=999125&r2=999126&view=diff
==============================================================================
--- hadoop/hive/trunk/contrib/src/java/org/apache/hadoop/hive/contrib/fileformat/base64/Base64TextOutputFormat.java (original)
+++ hadoop/hive/trunk/contrib/src/java/org/apache/hadoop/hive/contrib/fileformat/base64/Base64TextOutputFormat.java Mon Sep 20 21:39:48 2010
@@ -101,7 +101,7 @@ public class Base64TextOutputFormat<K ex
     }
 
     private byte[] signature;
-    private final Base64 base64 = new Base64();
+    private final Base64 base64 = Base64TextInputFormat.createBase64();
 
     @Override
     public void configure(JobConf job) {