Author: bryanduxbury
Date: Mon Apr 26 18:16:46 2010
New Revision: 938169
URL: http://svn.apache.org/viewvc?rev=938169&view=rev
Log:
THRIFT-760. java: Generated client code does not set or check the sequence ID
in messages
The Java generated clients weren't paying attention to sequence ids. Now they
are\!
Modified:
incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
Modified: incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
URL:
http://svn.apache.org/viewvc/incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc?rev=938169&r1=938168&r2=938169&view=diff
==============================================================================
--- incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
(original)
+++ incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc Mon
Apr 26 18:16:46 2010
@@ -2323,7 +2323,7 @@ void t_java_generator::generate_service_
// Serialize the request
f_service_ <<
- indent() << "oprot_.writeMessageBegin(new TMessage(\"" << funname <<
"\", TMessageType.CALL, seqid_));" << endl <<
+ indent() << "oprot_.writeMessageBegin(new TMessage(\"" << funname <<
"\", TMessageType.CALL, ++seqid_));" << endl <<
indent() << argsname << " args = new " << argsname << "();" << endl;
for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
@@ -2352,8 +2352,6 @@ void t_java_generator::generate_service_
"public " << function_signature(&recv_function) << endl;
scope_up(f_service_);
- // TODO(mcslee): Message validation here, was the seqid etc ok?
-
f_service_ <<
indent() << "TMessage msg = iprot_.readMessageBegin();" << endl <<
indent() << "if (msg.type == TMessageType.EXCEPTION) {" << endl <<
@@ -2361,6 +2359,9 @@ void t_java_generator::generate_service_
indent() << " iprot_.readMessageEnd();" << endl <<
indent() << " throw x;" << endl <<
indent() << "}" << endl <<
+ indent() << "if (msg.seqid != seqid_) {" << endl <<
+ indent() << " throw new
TApplicationException(TApplicationException.BAD_SEQUENCE_ID, \"" <<
(*f_iter)->get_name() << " failed: out of sequence response\");" << endl <<
+ indent() << "}" << endl <<
indent() << resultname << " result = new " << resultname << "();" <<
endl <<
indent() << "result.read(iprot_);" << endl <<
indent() << "iprot_.readMessageEnd();" << endl;