Author: bryanduxbury
Date: Fri Feb 26 21:38:42 2010
New Revision: 916825

URL: http://svn.apache.org/viewvc?rev=916825&view=rev
Log:
THRIFT-689. java:  Notify client of recoverable protocol errors on java server

When a protocol error occurs, the server will now send back a message 
containing the exception. Clients should be able to detect and rethrow these 
exceptions as appropriate.

Modified:
    incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
    
incubator/thrift/trunk/lib/java/src/org/apache/thrift/TApplicationException.java

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=916825&r1=916824&r2=916825&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 Fri 
Feb 26 21:38:42 2010
@@ -2538,7 +2538,25 @@
 
   f_service_ <<
     indent() << argsname << " args = new " << argsname << "();" << endl <<
-    indent() << "args.read(iprot);" << endl <<
+    indent() << "try {" << endl;
+  indent_up();
+  f_service_ <<
+    indent() << "args.read(iprot);" << endl;
+  indent_down();
+  f_service_ << 
+    indent() << "} catch (TProtocolException e) {" << endl;
+  indent_up();
+  f_service_ <<
+    indent() << "iprot.readMessageEnd();" << endl <<
+    indent() << "TApplicationException x = new 
TApplicationException(TApplicationException.PROTOCOL_ERROR, e.getMessage());" 
<< endl <<
+    indent() << "oprot.writeMessageBegin(new TMessage(\"" << 
tfunction->get_name() << "\", TMessageType.EXCEPTION, seqid));" << endl <<
+    indent() << "x.write(oprot);" << endl <<
+    indent() << "oprot.writeMessageEnd();" << endl <<
+    indent() << "oprot.getTransport().flush();" << endl <<
+    indent() << "return;" << endl;
+  indent_down();
+  f_service_ << indent() << "}" << endl;
+  f_service_ <<
     indent() << "iprot.readMessageEnd();" << endl;
 
   t_struct* xs = tfunction->get_xceptions();

Modified: 
incubator/thrift/trunk/lib/java/src/org/apache/thrift/TApplicationException.java
URL: 
http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/java/src/org/apache/thrift/TApplicationException.java?rev=916825&r1=916824&r2=916825&view=diff
==============================================================================
--- 
incubator/thrift/trunk/lib/java/src/org/apache/thrift/TApplicationException.java
 (original)
+++ 
incubator/thrift/trunk/lib/java/src/org/apache/thrift/TApplicationException.java
 Fri Feb 26 21:38:42 2010
@@ -44,6 +44,7 @@
   public static final int BAD_SEQUENCE_ID = 4;
   public static final int MISSING_RESULT = 5;
   public static final int INTERNAL_ERROR = 6;
+  public static final int PROTOCOL_ERROR = 7;
 
   protected int type_ = UNKNOWN;
 


Reply via email to