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\!

git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@938169 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 ab8af66..f1eb566 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -2323,7 +2323,7 @@
 
     // 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 @@
         "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 @@
         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;