diff --git a/lib/java/COPYING b/lib/java/COPYING
index 039f21e..0101a7d 100644
--- a/lib/java/COPYING
+++ b/lib/java/COPYING
@@ -1,5 +1,5 @@
 Thrift Software License
-Copyright (c) 2006- Facebook, Inc. 
+Copyright (c) 2006- Facebook, Inc.
 
 Permission is hereby granted, free of charge, to any person or organization
 obtaining a copy of the software and accompanying documentation covered by
diff --git a/lib/java/LICENSE b/lib/java/LICENSE
index 039f21e..0101a7d 100644
--- a/lib/java/LICENSE
+++ b/lib/java/LICENSE
@@ -1,5 +1,5 @@
 Thrift Software License
-Copyright (c) 2006- Facebook, Inc. 
+Copyright (c) 2006- Facebook, Inc.
 
 Permission is hereby granted, free of charge, to any person or organization
 obtaining a copy of the software and accompanying documentation covered by
diff --git a/lib/java/src/TApplicationException.java b/lib/java/src/TApplicationException.java
index fdce9f5..893a389 100644
--- a/lib/java/src/TApplicationException.java
+++ b/lib/java/src/TApplicationException.java
@@ -59,21 +59,21 @@
 
     while (true) {
       field = iprot.readFieldBegin();
-      if (field.type == TType.STOP) { 
+      if (field.type == TType.STOP) {
         break;
       }
       switch (field.id) {
       case 1:
         if (field.type == TType.STRING) {
           message = iprot.readString();
-        } else { 
+        } else {
           TProtocolUtil.skip(iprot, field.type);
         }
         break;
       case 2:
         if (field.type == TType.I32) {
           type = iprot.readI32();
-        } else { 
+        } else {
           TProtocolUtil.skip(iprot, field.type);
         }
         break;
diff --git a/lib/java/src/TException.java b/lib/java/src/TException.java
index 77eed3e..a328bfd 100644
--- a/lib/java/src/TException.java
+++ b/lib/java/src/TException.java
@@ -19,7 +19,7 @@
   public TException(String message) {
     super(message);
   }
- 
+
   public TException(Throwable cause) {
     super(cause);
   }
diff --git a/lib/java/src/TProcessorFactory.java b/lib/java/src/TProcessorFactory.java
index ace90a2..5bac1ba 100644
--- a/lib/java/src/TProcessorFactory.java
+++ b/lib/java/src/TProcessorFactory.java
@@ -15,11 +15,11 @@
 public class TProcessorFactory {
 
   private final TProcessor processor_;
-  
+
   public TProcessorFactory(TProcessor processor) {
     processor_ = processor;
   }
-  
+
   public TProcessor getProcessor(TTransport trans) {
     return processor_;
   }
diff --git a/lib/java/src/protocol/TBinaryProtocol.java b/lib/java/src/protocol/TBinaryProtocol.java
index b9167d2..750dce1 100644
--- a/lib/java/src/protocol/TBinaryProtocol.java
+++ b/lib/java/src/protocol/TBinaryProtocol.java
@@ -27,7 +27,7 @@
 
   protected int readLength_;
   protected boolean checkReadLength_ = false;
-  
+
   /**
    * Factory
    */
@@ -321,7 +321,7 @@
     checkReadLength(len);
     return trans_.readAll(buf, off, len);
   }
-  
+
   public void setReadLength(int readLength) {
     readLength_ = readLength;
     checkReadLength_ = true;
@@ -335,5 +335,5 @@
       }
     }
   }
-  
+
 }
diff --git a/lib/java/src/protocol/TList.java b/lib/java/src/protocol/TList.java
index d1c7642..3fe8599 100644
--- a/lib/java/src/protocol/TList.java
+++ b/lib/java/src/protocol/TList.java
@@ -13,7 +13,7 @@
  */
 public class TList {
   public TList() {}
-  
+
   public TList(byte t, int s) {
     elemType = t;
     size = s;
diff --git a/lib/java/src/protocol/TMap.java b/lib/java/src/protocol/TMap.java
index 0a0e4df..9b7126e 100644
--- a/lib/java/src/protocol/TMap.java
+++ b/lib/java/src/protocol/TMap.java
@@ -13,7 +13,7 @@
  */
 public class TMap {
   public TMap() {}
-  
+
   public TMap(byte k, byte v, int s) {
     keyType = k;
     valueType = v;
diff --git a/lib/java/src/protocol/TProtocol.java b/lib/java/src/protocol/TProtocol.java
index 08a7ef3..3e7e7f0 100644
--- a/lib/java/src/protocol/TProtocol.java
+++ b/lib/java/src/protocol/TProtocol.java
@@ -23,7 +23,7 @@
 
   /**
    * Transport
-   */ 
+   */
   protected TTransport trans_;
 
   /**
@@ -32,7 +32,7 @@
   protected TProtocol(TTransport trans) {
     trans_ = trans;
   }
-  
+
   /**
    * Transport accessor
    */
@@ -47,7 +47,7 @@
   public abstract void writeMessageBegin(TMessage message) throws TException;
 
   public abstract void writeMessageEnd() throws TException;
-  
+
   public abstract void writeStructBegin(TStruct struct) throws TException;
 
   public abstract void writeStructEnd() throws TException;
@@ -99,9 +99,9 @@
   public abstract void readStructEnd() throws TException;
 
   public abstract TField readFieldBegin() throws TException;
-  
+
   public abstract void readFieldEnd() throws TException;
- 
+
   public abstract TMap readMapBegin() throws TException;
 
   public abstract void readMapEnd() throws TException;
@@ -121,7 +121,7 @@
   public abstract short readI16() throws TException;
 
   public abstract int readI32() throws TException;
- 
+
   public abstract long readI64() throws TException;
 
   public abstract double readDouble() throws TException;
diff --git a/lib/java/src/protocol/TProtocolUtil.java b/lib/java/src/protocol/TProtocolUtil.java
index ad333bc..0b85d38 100644
--- a/lib/java/src/protocol/TProtocolUtil.java
+++ b/lib/java/src/protocol/TProtocolUtil.java
@@ -80,7 +80,7 @@
         break;
       }
     case TType.SET:
-      {        
+      {
         TSet set = prot.readSetBegin();
         for (int i = 0; i < set.size; i++) {
           skip(prot, set.elemType);
diff --git a/lib/java/src/reflection/limited/Argument.java b/lib/java/src/reflection/limited/Argument.java
index c24e07e..2a485e8 100644
--- a/lib/java/src/reflection/limited/Argument.java
+++ b/lib/java/src/reflection/limited/Argument.java
@@ -49,7 +49,7 @@
     while (true)
     {
       field = iprot.readFieldBegin();
-      if (field.type == TType.STOP) { 
+      if (field.type == TType.STOP) {
         break;
       }
       switch (field.id)
@@ -58,7 +58,7 @@
           if (field.type == TType.I16) {
             this.key = iprot.readI16();
             this.__isset.key = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
@@ -66,7 +66,7 @@
           if (field.type == TType.STRING) {
             this.name = iprot.readString();
             this.__isset.name = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
@@ -75,7 +75,7 @@
             this.type = new ThriftType();
             this.type.read(iprot);
             this.__isset.type = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
diff --git a/lib/java/src/reflection/limited/ContainerType.java b/lib/java/src/reflection/limited/ContainerType.java
index 11d3872..6c8bcc3 100644
--- a/lib/java/src/reflection/limited/ContainerType.java
+++ b/lib/java/src/reflection/limited/ContainerType.java
@@ -49,7 +49,7 @@
     while (true)
     {
       field = iprot.readFieldBegin();
-      if (field.type == TType.STOP) { 
+      if (field.type == TType.STOP) {
         break;
       }
       switch (field.id)
@@ -58,7 +58,7 @@
           if (field.type == TType.I32) {
             this.ttype = iprot.readI32();
             this.__isset.ttype = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
@@ -67,7 +67,7 @@
             this.subtype1 = new SimpleType();
             this.subtype1.read(iprot);
             this.__isset.subtype1 = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
@@ -76,7 +76,7 @@
             this.subtype2 = new SimpleType();
             this.subtype2.read(iprot);
             this.__isset.subtype2 = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
diff --git a/lib/java/src/reflection/limited/Method.java b/lib/java/src/reflection/limited/Method.java
index 64ba21d..41fa6ca 100644
--- a/lib/java/src/reflection/limited/Method.java
+++ b/lib/java/src/reflection/limited/Method.java
@@ -49,7 +49,7 @@
     while (true)
     {
       field = iprot.readFieldBegin();
-      if (field.type == TType.STOP) { 
+      if (field.type == TType.STOP) {
         break;
       }
       switch (field.id)
@@ -58,7 +58,7 @@
           if (field.type == TType.STRING) {
             this.name = iprot.readString();
             this.__isset.name = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
@@ -67,7 +67,7 @@
             this.return_type = new ThriftType();
             this.return_type.read(iprot);
             this.__isset.return_type = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
@@ -86,7 +86,7 @@
               iprot.readListEnd();
             }
             this.__isset.arguments = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
diff --git a/lib/java/src/reflection/limited/Service.java b/lib/java/src/reflection/limited/Service.java
index f3a9481..fcbd09c 100644
--- a/lib/java/src/reflection/limited/Service.java
+++ b/lib/java/src/reflection/limited/Service.java
@@ -49,7 +49,7 @@
     while (true)
     {
       field = iprot.readFieldBegin();
-      if (field.type == TType.STOP) { 
+      if (field.type == TType.STOP) {
         break;
       }
       switch (field.id)
@@ -58,7 +58,7 @@
           if (field.type == TType.STRING) {
             this.name = iprot.readString();
             this.__isset.name = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
@@ -77,7 +77,7 @@
               iprot.readListEnd();
             }
             this.__isset.methods = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
@@ -85,7 +85,7 @@
           if (field.type == TType.BOOL) {
             this.fully_reflected = iprot.readBool();
             this.__isset.fully_reflected = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
diff --git a/lib/java/src/reflection/limited/SimpleType.java b/lib/java/src/reflection/limited/SimpleType.java
index c0feae6..2a69e39 100644
--- a/lib/java/src/reflection/limited/SimpleType.java
+++ b/lib/java/src/reflection/limited/SimpleType.java
@@ -44,7 +44,7 @@
     while (true)
     {
       field = iprot.readFieldBegin();
-      if (field.type == TType.STOP) { 
+      if (field.type == TType.STOP) {
         break;
       }
       switch (field.id)
@@ -53,7 +53,7 @@
           if (field.type == TType.I32) {
             this.ttype = iprot.readI32();
             this.__isset.ttype = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
@@ -61,7 +61,7 @@
           if (field.type == TType.STRING) {
             this.name = iprot.readString();
             this.__isset.name = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
diff --git a/lib/java/src/reflection/limited/ThriftType.java b/lib/java/src/reflection/limited/ThriftType.java
index d3bb3eb..63022ec 100644
--- a/lib/java/src/reflection/limited/ThriftType.java
+++ b/lib/java/src/reflection/limited/ThriftType.java
@@ -49,7 +49,7 @@
     while (true)
     {
       field = iprot.readFieldBegin();
-      if (field.type == TType.STOP) { 
+      if (field.type == TType.STOP) {
         break;
       }
       switch (field.id)
@@ -58,7 +58,7 @@
           if (field.type == TType.BOOL) {
             this.is_container = iprot.readBool();
             this.__isset.is_container = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
@@ -67,7 +67,7 @@
             this.simple_type = new SimpleType();
             this.simple_type.read(iprot);
             this.__isset.simple_type = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
@@ -76,7 +76,7 @@
             this.container_type = new ContainerType();
             this.container_type.read(iprot);
             this.__isset.container_type = true;
-          } else { 
+          } else {
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
diff --git a/lib/java/src/server/TServer.java b/lib/java/src/server/TServer.java
index 2ac322a..c066607 100644
--- a/lib/java/src/server/TServer.java
+++ b/lib/java/src/server/TServer.java
@@ -56,7 +56,7 @@
   protected TServer(TProcessorFactory processorFactory,
                     TServerTransport serverTransport) {
     this(processorFactory,
-         serverTransport,         
+         serverTransport,
          new TTransportFactory(),
          new TTransportFactory(),
          new TBinaryProtocol.Factory(),
@@ -99,7 +99,7 @@
     inputProtocolFactory_ = inputProtocolFactory;
     outputProtocolFactory_ = outputProtocolFactory;
   }
-  
+
   /**
    * The run method fires up the server and gets things going.
    */
diff --git a/lib/java/src/server/TSimpleServer.java b/lib/java/src/server/TSimpleServer.java
index cb127c7..bf66843 100644
--- a/lib/java/src/server/TSimpleServer.java
+++ b/lib/java/src/server/TSimpleServer.java
@@ -42,8 +42,8 @@
                        TTransportFactory inputTransportFactory,
                        TTransportFactory outputTransportFactory,
                        TProtocolFactory inputProtocolFactory,
-                       TProtocolFactory outputProtocolFactory) {                       
-    super(new TProcessorFactory(processor), serverTransport, 
+                       TProtocolFactory outputProtocolFactory) {
+    super(new TProcessorFactory(processor), serverTransport,
           inputTransportFactory, outputTransportFactory,
           inputProtocolFactory, outputProtocolFactory);
   }
@@ -65,13 +65,13 @@
           TTransportFactory inputTransportFactory,
           TTransportFactory outputTransportFactory,
           TProtocolFactory inputProtocolFactory,
-          TProtocolFactory outputProtocolFactory) {                       
-    super(processorFactory, serverTransport, 
+          TProtocolFactory outputProtocolFactory) {
+    super(processorFactory, serverTransport,
           inputTransportFactory, outputTransportFactory,
           inputProtocolFactory, outputProtocolFactory);
   }
- 
-  
+
+
   public void serve() {
     stopped_ = false;
     try {
diff --git a/lib/java/src/transport/TIOStreamTransport.java b/lib/java/src/transport/TIOStreamTransport.java
index e9998b9..5fef3b7 100644
--- a/lib/java/src/transport/TIOStreamTransport.java
+++ b/lib/java/src/transport/TIOStreamTransport.java
@@ -55,7 +55,7 @@
    *
    * @param is Input stream to read from
    * @param os Output stream to read from
-   */ 
+   */
   public TIOStreamTransport(InputStream is, OutputStream os) {
     inputStream_ = is;
     outputStream_ = os;
diff --git a/lib/java/src/transport/TServerSocket.java b/lib/java/src/transport/TServerSocket.java
index cc6d900..2692ac4 100644
--- a/lib/java/src/transport/TServerSocket.java
+++ b/lib/java/src/transport/TServerSocket.java
@@ -18,7 +18,7 @@
  * @author Mark Slee <mcslee@facebook.com>
  */
 public class TServerSocket extends TServerTransport {
-  
+
   /**
    * Underlying serversocket object
    */
@@ -85,7 +85,7 @@
       }
     }
   }
-  
+
   protected TSocket acceptImpl() throws TTransportException {
     if (serverSocket_ == null) {
       throw new TTransportException(TTransportException.NOT_OPEN, "No underlying server socket.");
diff --git a/lib/java/src/transport/TSocket.java b/lib/java/src/transport/TSocket.java
index 2c17e43..2053850 100644
--- a/lib/java/src/transport/TSocket.java
+++ b/lib/java/src/transport/TSocket.java
@@ -24,7 +24,7 @@
    * Wrapped Socket object
    */
   private Socket socket_ = null;
-  
+
   /**
    * Remote host
    */
