summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan Duxbury <bryanduxbury@apache.org>2010-04-26 18:16:46 +0000
committerBryan Duxbury <bryanduxbury@apache.org>2010-04-26 18:16:46 +0000
commit97d21c853d543dbba497650badcf10334910edaf (patch)
treec7321b48f3130f0f1c7eabd73468a6d429e324d3
parent719ab84318ae1c7c59da5657ef0ad41dc4c3f921 (diff)
downloadthrift-97d21c853d543dbba497650badcf10334910edaf.tar.gz
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
-rw-r--r--compiler/cpp/src/generate/t_java_generator.cc7
1 files changed, 4 insertions, 3 deletions
diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc
index ab8af6695..f1eb5661e 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -2323,7 +2323,7 @@ void t_java_generator::generate_service_client(t_service* tservice) {
// 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_client(t_service* tservice) {
"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_client(t_service* tservice) {
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;