Thrift application exceptions in Java
Reviewed By: thrift
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665008 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/java/src/TApplicationException.java b/lib/java/src/TApplicationException.java
new file mode 100644
index 0000000..0890282
--- /dev/null
+++ b/lib/java/src/TApplicationException.java
@@ -0,0 +1,107 @@
+package com.facebook.thrift;
+
+import com.facebook.thrift.protocol.TField;
+import com.facebook.thrift.protocol.TProtocol;
+import com.facebook.thrift.protocol.TProtocolUtil;
+import com.facebook.thrift.protocol.TStruct;
+import com.facebook.thrift.protocol.TType;
+
+/**
+ * Application level exception
+ *
+ * @author Mark Slee <mcslee@facebook.com>
+ */
+public class TApplicationException extends TException {
+
+ public static final int UNKNOWN = 0;
+ public static final int UNKNOWN_METHOD = 1;
+ public static final int INVALID_MESSAGE_TYPE = 2;
+ public static final int WRONG_METHOD_NAME = 3;
+ public static final int BAD_SEQUENCE_ID = 4;
+ public static final int MISSING_RESULT = 5;
+
+ protected int type_ = 0;
+
+ public TApplicationException() {
+ super();
+ }
+
+ public TApplicationException(int type) {
+ super();
+ type_ = type;
+ }
+
+ public TApplicationException(int type, String message) {
+ super(message);
+ type_ = type;
+ }
+
+ public TApplicationException(String message) {
+ super(message);
+ }
+
+ public int getType() {
+ return type_;
+ }
+
+ public static TApplicationException read(TProtocol iprot) throws TException {
+ TField field;
+ TStruct struct = iprot.readStructBegin();
+
+ String message = null;
+ int type = UNKNOWN;
+
+ while (true) {
+ field = iprot.readFieldBegin();
+ if (field.type == TType.STOP) {
+ break;
+ }
+ switch (field.id) {
+ case 1:
+ if (field.type == TType.STRING) {
+ message = iprot.readString();
+ } else {
+ TProtocolUtil.skip(iprot, field.type);
+ }
+ break;
+ case 2:
+ if (field.type == TType.I32) {
+ type = iprot.readI32();
+ } else {
+ TProtocolUtil.skip(iprot, field.type);
+ }
+ break;
+ default:
+ TProtocolUtil.skip(iprot, field.type);
+ break;
+ }
+ iprot.readFieldEnd();
+ }
+ iprot.readStructEnd();
+
+ return new TApplicationException(type, message);
+ }
+
+ public void write(TProtocol oprot) throws TException {
+ TStruct struct = new TStruct("TApplicationException");
+ TField field = new TField();
+ oprot.writeStructBegin(struct);
+ if (getMessage() != null) {
+ field.name = "message";
+ field.type = TType.STRING;
+ field.id = 1;
+ oprot.writeFieldBegin(field);
+ oprot.writeString(getMessage());
+ oprot.writeFieldEnd();
+ }
+ field.name = "type";
+ field.type = TType.I32;
+ field.id = 2;
+ oprot.writeFieldBegin(field);
+ oprot.writeI32(type_);
+ oprot.writeFieldEnd();
+ oprot.writeFieldStop();
+ oprot.writeStructEnd();
+
+ }
+}
diff --git a/lib/java/src/protocol/TMessageType.java b/lib/java/src/protocol/TMessageType.java
index 905f99a..0e0b8fd 100644
--- a/lib/java/src/protocol/TMessageType.java
+++ b/lib/java/src/protocol/TMessageType.java
@@ -8,4 +8,5 @@
public final class TMessageType {
public static final byte CALL = 1;
public static final byte REPLY = 2;
+ public static final byte EXCEPTION = 3;
}