TApplicationException handling in PHP generated thrift code
Reviewed By: php
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665028 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/generate/t_php_generator.cc b/compiler/cpp/src/generate/t_php_generator.cc
index 35f4de4..36dd8d9 100644
--- a/compiler/cpp/src/generate/t_php_generator.cc
+++ b/compiler/cpp/src/generate/t_php_generator.cc
@@ -632,15 +632,28 @@
indent() << "$input->readMessageBegin($fname, $mtype, $rseqid);" << endl;
}
- // TODO(mcslee): validate message
-
// HOT: check for method implementation
f_service_ <<
indent() << "$methodname = 'process_'.$fname;" << endl <<
- indent() << "if (!method_exists($this, $methodname)) {" << endl <<
- indent() << " throw new Exception('Function '.$fname.' not implemented.');" << endl <<
+ indent() << "if (!method_exists($this, $methodname)) {" << endl;
+ if (binary_inline_) {
+ f_service_ <<
+ indent() << " throw new Exception('Function '.$fname.' not implemented.');" << endl;
+ } else {
+ f_service_ <<
+ indent() << " $input->skip(TType::STRUCT);" << endl <<
+ indent() << " $input->readMessageEnd();" << endl <<
+ indent() << " $x = new TApplicationException('Function '.$fname.' not implemented.', TApplicationException::UNKNOWN_METHOD);" << endl <<
+ indent() << " $output->writeMessageBegin($fname, TMessageType::EXCEPTION, $rseqid);" << endl <<
+ indent() << " $x->write($output);" << endl <<
+ indent() << " $output->writeMessageEnd();" << endl <<
+ indent() << " $output->getTransport()->flush();" << endl <<
+ indent() << " return;" << endl;
+ }
+ f_service_ <<
indent() << "}" << endl <<
- indent() << "$this->$methodname($rseqid, $input, $output);" << endl;
+ indent() << "$this->$methodname($rseqid, $input, $output);" << endl <<
+ indent() << "return true;" << endl;
indent_down();
f_service_ <<
indent() << "}" << endl <<
@@ -1047,11 +1060,15 @@
generate_deserialize_field(f_service_, &fseqid, "", true);
} else {
f_service_ <<
- indent() << "$this->input_->readMessageBegin($fname, $mtype, $rseqid);" << endl;
+ indent() << "$this->input_->readMessageBegin($fname, $mtype, $rseqid);" << endl <<
+ indent() << "if ($mtype == TMessageType::EXCEPTION) {" << endl <<
+ indent() << " $x = new TApplicationException();" << endl <<
+ indent() << " $x->read($input);" << endl <<
+ indent() << " $input->readMessageEnd();" << endl <<
+ indent() << " throw $x;" << endl <<
+ indent() << "}" << endl;
}
- // TODO(mcslee): Validate message reply here
-
f_service_ <<
indent() << "$result = new " << resultname << "();" << endl <<
indent() << "$result->read($this->input_);" << endl;