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;