THRIFT-1447. java: NullpointerException in ProcessFunction.class :in 'oneway' method

Patch: Ihor Mysak

git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1244272 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc
index b76338a..3f83222 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -2673,6 +2673,10 @@
   indent(f_service_) << "  return new " << argsname << "();" << endl;
   indent(f_service_) << "}" << endl << endl;
 
+  indent(f_service_) << "protected boolean isOneway() {" << endl;
+  indent(f_service_) << "  return " << ((tfunction->is_oneway())?"true":"false") << ";" << endl;
+  indent(f_service_) << "}" << endl << endl;
+
   indent(f_service_) << "public " << resultname << " getResult(I iface, " << argsname << " args) throws org.apache.thrift.TException {" << endl;
   indent_up();
   if (!tfunction->is_oneway()) {
diff --git a/lib/java/src/org/apache/thrift/ProcessFunction.java b/lib/java/src/org/apache/thrift/ProcessFunction.java
index 88d57a5..3afd38c 100644
--- a/lib/java/src/org/apache/thrift/ProcessFunction.java
+++ b/lib/java/src/org/apache/thrift/ProcessFunction.java
@@ -30,12 +30,16 @@
     }
     iprot.readMessageEnd();
     TBase result = getResult(iface, args);
-    oprot.writeMessageBegin(new TMessage(getMethodName(), TMessageType.REPLY, seqid));
-    result.write(oprot);
-    oprot.writeMessageEnd();
-    oprot.getTransport().flush();
+    if(!isOneway()) {
+      oprot.writeMessageBegin(new TMessage(getMethodName(), TMessageType.REPLY, seqid));
+      result.write(oprot);
+      oprot.writeMessageEnd();
+      oprot.getTransport().flush();
+    }
   }
 
+  protected abstract boolean isOneway();
+
   public abstract TBase getResult(I iface, T args) throws TException;
 
   public abstract T getEmptyArgsInstance();