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;


Reply via email to