diff --git a/lib/java/README.md b/lib/java/README.md
index 7dca456..78e6445 100644
--- a/lib/java/README.md
+++ b/lib/java/README.md
@@ -170,9 +170,12 @@
 
 ## 1.0
 
-The signature of the 'process' method in TAsyncProcessor and TProcessor has
+* The signature of the 'process' method in TAsyncProcessor and TProcessor has
 changed to remove a boolean return type and to instead rely on Exceptions.
 
+* Per THRIFT-4805, TSaslTransportException has been removed. The same condition
+is now covered by TTansportException, where `TTransportException.getType() == END_OF_FILE`.
+ 
 ## 0.12.0
 
 The access modifier of the AutoExpandingBuffer class has been changed from
diff --git a/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java b/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java
index db1ecb9..87e8733 100644
--- a/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java
+++ b/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java
@@ -19,6 +19,8 @@
 
 package org.apache.thrift.server;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.Random;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.RejectedExecutionException;
@@ -29,14 +31,12 @@
 import org.apache.thrift.TException;
 import org.apache.thrift.TProcessor;
 import org.apache.thrift.protocol.TProtocol;
-import org.apache.thrift.transport.TSaslTransportException;
 import org.apache.thrift.transport.TServerTransport;
 import org.apache.thrift.transport.TTransport;
 import org.apache.thrift.transport.TTransportException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 /**
  * Server which uses Java's built in ThreadPool management to spawn off
  * a worker pool that
@@ -312,21 +312,13 @@
             }
             processor.process(inputProtocol, outputProtocol);
         }
-      } catch (TException tx) {
-        LOGGER.error("Thrift error occurred during processing of message.", tx);
       } catch (Exception x) {
         // We'll usually receive RuntimeException types here
         // Need to unwrap to ascertain real causing exception before we choose to ignore
-        Throwable realCause = x.getCause();
         // Ignore err-logging all transport-level/type exceptions
-        if ((realCause != null && realCause instanceof TTransportException)
-            || (x instanceof TTransportException)) {
-          LOGGER.debug(
-              "Received TTransportException during processing of message. Ignoring.",
-              x);
-        } else {
+        if (!isIgnorableException(x)) {
           // Log the exception at error level and continue
-          LOGGER.error("Error occurred during processing of message.", x);
+          LOGGER.error((x instanceof TException? "Thrift " : "") + "Error occurred during processing of message.", x);
         }
       } finally {
         if (eventHandler != null) {
@@ -343,5 +335,25 @@
         }
       }
     }
+
+    private boolean isIgnorableException(Exception x) {
+      TTransportException tTransportException = null;
+
+      if (x instanceof TTransportException) {
+        tTransportException = (TTransportException)x;
+      }
+      else if (x.getCause() instanceof TTransportException) {
+        tTransportException = (TTransportException)x.getCause();
+      }
+
+      if (tTransportException != null) {
+        switch(tTransportException.getType()) {
+          case TTransportException.END_OF_FILE:
+          case TTransportException.TIMED_OUT:
+            return true;
+        }
+      }
+      return false;
+    }
   }
 }
diff --git a/lib/java/src/org/apache/thrift/transport/TSaslTransport.java b/lib/java/src/org/apache/thrift/transport/TSaslTransport.java
index c858425..4a453b6 100644
--- a/lib/java/src/org/apache/thrift/transport/TSaslTransport.java
+++ b/lib/java/src/org/apache/thrift/transport/TSaslTransport.java
@@ -310,14 +310,11 @@
         underlyingTransport.close();
       }
     } catch (TTransportException e) {
-      /*
-       * If there is no-data or no-sasl header in the stream, throw a different
-       * type of exception so we can handle this scenario differently.
-       */
+      // If there is no-data or no-sasl header in the stream,
+      // log the failure, and clean up the underlying transport.
       if (!readSaslHeader && e.getType() == TTransportException.END_OF_FILE) {
         underlyingTransport.close();
-        LOGGER.debug("No data or no sasl data in the stream");
-        throw new TSaslTransportException("No data or no sasl data in the stream during negotiation", e);
+        LOGGER.debug("No data or no sasl data in the stream during negotiation");
       }
       throw e;
     }
@@ -427,6 +424,14 @@
       readFrame();
     } catch (SaslException e) {
       throw new TTransportException(e);
+    } catch (TTransportException transportException) {
+      // If there is no-data or no-sasl header in the stream, log the failure, and rethrow.
+      if (transportException.getType() == TTransportException.END_OF_FILE) {
+        if (LOGGER.isDebugEnabled()) {
+          LOGGER.debug("No data or no sasl data in the stream during negotiation");
+        }
+      }
+      throw transportException;
     }
 
     return readBuffer.read(buf, off, len);
diff --git a/lib/java/src/org/apache/thrift/transport/TSaslTransportException.java b/lib/java/src/org/apache/thrift/transport/TSaslTransportException.java
deleted file mode 100644
index 90189f4..0000000
--- a/lib/java/src/org/apache/thrift/transport/TSaslTransportException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.thrift.transport;
-
-/*
- * This exception is used to track exceptions in TSaslTransport
- * that does not have Sasl signature in their stream.
- */
-public class TSaslTransportException extends TTransportException {
-
-  public TSaslTransportException() {
-    super();
-  }
-
-  public TSaslTransportException(String message) {
-    super(message);
-  }
-
-  public TSaslTransportException(Throwable cause) {
-    super(cause);
-  }
-
-  public TSaslTransportException(String message, Throwable cause) {
-    super(message, cause);
-  }
-}
