THRIFT-4725: Change Return Type Signature of Process Methods
diff --git a/CHANGES.md b/CHANGES.md
index 4f84275..2dd7f0a 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -19,6 +19,7 @@
 - [THRIFT-4730](https://issues.apache.org/jira/browse/THRIFT-4730) - C++: BoostThreadFactory, PosixThreadFactory, StdThreadFactory removed
 - [THRIFT-4732](https://issues.apache.org/jira/browse/THRIFT-4732) - C++: CMake build changed to use BUILD_SHARED_LIBS
 - [THRIFT-4735](https://issues.apache.org/jira/browse/THRIFT-4735) - C++: Removed Qt4 support
+- [THRIFT-4725](https://issues.apache.org/jira/browse/THRIFT-4725) - Java change return type signature of 'process' methods
 
 ### Known Isues (Blocker or Critical)
 
diff --git a/lib/java/README.md b/lib/java/README.md
index 0b5f0d8..5057465 100644
--- a/lib/java/README.md
+++ b/lib/java/README.md
@@ -164,6 +164,11 @@
 
 # Breaking Changes
 
+## 1.0
+
+The signature of the 'process' method in TAsyncProcessor and TProcessor has
+changed to remove a boolean return type and to instead rely on Exceptions.
+
 ## 0.12.0
 
 The access modifier of the AutoExpandingBuffer class has been changed from
diff --git a/lib/java/src/org/apache/thrift/TAsyncProcessor.java b/lib/java/src/org/apache/thrift/TAsyncProcessor.java
index 533e74d..66f7688 100644
--- a/lib/java/src/org/apache/thrift/TAsyncProcessor.java
+++ b/lib/java/src/org/apache/thrift/TAsyncProcessor.java
@@ -21,8 +21,13 @@
 import org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer;
 
 public interface TAsyncProcessor {
-    /**
-     * Implementations must call fb.responseReady() once processing is complete
-     */
-    public boolean process(final AsyncFrameBuffer fb) throws TException;
+  /**
+   * Process a single frame.
+   
+   * <b>Note:</b> Implementations must call fb.responseReady() once processing
+   * is complete
+   *
+   * @throws TException if the frame cannot be processed
+   */
+  public void process(final AsyncFrameBuffer fb) throws TException;
 }
diff --git a/lib/java/src/org/apache/thrift/TBaseAsyncProcessor.java b/lib/java/src/org/apache/thrift/TBaseAsyncProcessor.java
index 0ab1827..f13f068 100644
--- a/lib/java/src/org/apache/thrift/TBaseAsyncProcessor.java
+++ b/lib/java/src/org/apache/thrift/TBaseAsyncProcessor.java
@@ -43,7 +43,7 @@
         return Collections.unmodifiableMap(processMap);
     }
 
-    public boolean process(final AsyncFrameBuffer fb) throws TException {
+    public void process(final AsyncFrameBuffer fb) throws TException {
 
         final TProtocol in = fb.getInputProtocol();
         final TProtocol out = fb.getOutputProtocol();
@@ -67,7 +67,7 @@
               out.getTransport().flush();
             }
             fb.responseReady();
-            return true;
+            return;
         }
 
         //Get Args
@@ -89,7 +89,7 @@
               out.getTransport().flush();
             }
             fb.responseReady();
-            return true;
+            return;
         }
         in.readMessageEnd();
 
@@ -105,11 +105,10 @@
           LOGGER.debug("Exception handling function", e);
           resultHandler.onError(e);
         }
-        return true;
+        return;
     }
 
     @Override
-    public boolean process(TProtocol in, TProtocol out) throws TException {
-        return false;
+    public void process(TProtocol in, TProtocol out) throws TException {
     }
 }
diff --git a/lib/java/src/org/apache/thrift/TBaseProcessor.java b/lib/java/src/org/apache/thrift/TBaseProcessor.java
index f9a9a9e..55a0f15 100644
--- a/lib/java/src/org/apache/thrift/TBaseProcessor.java
+++ b/lib/java/src/org/apache/thrift/TBaseProcessor.java
@@ -23,7 +23,7 @@
   }
 
   @Override
-  public boolean process(TProtocol in, TProtocol out) throws TException {
+  public void process(TProtocol in, TProtocol out) throws TException {
     TMessage msg = in.readMessageBegin();
     ProcessFunction fn = processMap.get(msg.name);
     if (fn == null) {
@@ -34,9 +34,8 @@
       x.write(out);
       out.writeMessageEnd();
       out.getTransport().flush();
-      return true;
+    } else {
+      fn.process(msg.seqid, in, out, iface);
     }
-    fn.process(msg.seqid, in, out, iface);
-    return true;
   }
 }
diff --git a/lib/java/src/org/apache/thrift/TMultiplexedProcessor.java b/lib/java/src/org/apache/thrift/TMultiplexedProcessor.java
index d0c5603..14b541d 100644
--- a/lib/java/src/org/apache/thrift/TMultiplexedProcessor.java
+++ b/lib/java/src/org/apache/thrift/TMultiplexedProcessor.java
@@ -92,7 +92,7 @@
      * name was not found in the service map.  You called {@link #registerProcessor(String, TProcessor) registerProcessor}
      * during initialization, right? :)
      */
-    public boolean process(TProtocol iprot, TProtocol oprot) throws TException {
+    public void process(TProtocol iprot, TProtocol oprot) throws TException {
         /*
             Use the actual underlying protocol (e.g. TBinaryProtocol) to read the
             message header.  This pulls the message "off the wire", which we'll
@@ -109,7 +109,8 @@
         if (index < 0) {
           if (defaultProcessor != null) {
                 // Dispatch processing to the stored processor
-                return defaultProcessor.process(new StoredMessageProtocol(iprot, message), oprot);
+                defaultProcessor.process(new StoredMessageProtocol(iprot, message), oprot);
+                return;
           }
             throw new TException("Service name not found in message name: " + message.name + ".  Did you " +
                     "forget to use a TMultiplexProtocol in your client?");
@@ -131,7 +132,7 @@
         );
 
         // Dispatch processing to the stored processor
-        return actualProcessor.process(new StoredMessageProtocol(iprot, standardMessage), oprot);
+        actualProcessor.process(new StoredMessageProtocol(iprot, standardMessage), oprot);
     }
 
     /**
diff --git a/lib/java/src/org/apache/thrift/TProcessor.java b/lib/java/src/org/apache/thrift/TProcessor.java
index d79522c..15ba9c0 100644
--- a/lib/java/src/org/apache/thrift/TProcessor.java
+++ b/lib/java/src/org/apache/thrift/TProcessor.java
@@ -24,9 +24,7 @@
 /**
  * A processor is a generic object which operates upon an input stream and
  * writes to some output stream.
- *
  */
 public interface TProcessor {
-  public boolean process(TProtocol in, TProtocol out)
-    throws TException;
+  public void process(TProtocol in, TProtocol out) throws TException;
 }
diff --git a/lib/java/src/org/apache/thrift/server/TSimpleServer.java b/lib/java/src/org/apache/thrift/server/TSimpleServer.java
index e815b2c..13501ef 100644
--- a/lib/java/src/org/apache/thrift/server/TSimpleServer.java
+++ b/lib/java/src/org/apache/thrift/server/TSimpleServer.java
@@ -77,9 +77,7 @@
             if (eventHandler_ != null) {
               eventHandler_.processContext(connectionContext, inputTransport, outputTransport);
             }
-            if(!processor.process(inputProtocol, outputProtocol)) {
-              break;
-            }
+            processor.process(inputProtocol, outputProtocol);
           }
         }
       } catch (TTransportException ttx) {
diff --git a/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java b/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java
index 1697ad6..db1ecb9 100644
--- a/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java
+++ b/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java
@@ -307,9 +307,10 @@
               eventHandler.processContext(connectionContext, inputTransport, outputTransport);
             }
 
-            if(stopped_ || !processor.process(inputProtocol, outputProtocol)) {
+            if (stopped_) {
               break;
             }
+            processor.process(inputProtocol, outputProtocol);
         }
       } catch (TException tx) {
         LOGGER.error("Thrift error occurred during processing of message.", tx);
diff --git a/lib/java/test/org/apache/thrift/TestMultiplexedProcessor.java b/lib/java/test/org/apache/thrift/TestMultiplexedProcessor.java
index 01776ca..85e7966 100644
--- a/lib/java/test/org/apache/thrift/TestMultiplexedProcessor.java
+++ b/lib/java/test/org/apache/thrift/TestMultiplexedProcessor.java
@@ -57,13 +57,12 @@
 
   static class StubProcessor implements TProcessor {
     @Override
-    public boolean process(TProtocol in, TProtocol out) throws TException {
+    public void process(TProtocol in, TProtocol out) throws TException {
       TMessage msg = in.readMessageBegin();
       if (!"func".equals(msg.name) || msg.type!=TMessageType.CALL || msg.seqid!=42) {
         throw new TException("incorrect parameters");
       }
       out.writeMessageBegin(new TMessage("func", TMessageType.REPLY, 42));
-      return true;
     }
   }