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
    */
