From: Bryan Duxbury Date: Tue, 14 Feb 2012 23:35:22 +0000 (+0000) Subject: THRIFT-1447. java: NullpointerException in ProcessFunction.class :in 'oneway' method X-Git-Tag: 0.9.1~445 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=b405ca6be839c5a7072cbe3cd3a584523b960058;p=common%2Fthrift.git 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 b76338a7..3f832226 100644 --- a/compiler/cpp/src/generate/t_java_generator.cc +++ b/compiler/cpp/src/generate/t_java_generator.cc @@ -2673,6 +2673,10 @@ void t_java_generator::generate_process_function(t_service* tservice, 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 88d57a50..3afd38cc 100644 --- a/lib/java/src/org/apache/thrift/ProcessFunction.java +++ b/lib/java/src/org/apache/thrift/ProcessFunction.java @@ -30,12 +30,16 @@ public abstract class ProcessFunction { } 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();