You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by GitBox <gi...@apache.org> on 2018/06/04 07:18:55 UTC

[GitHub] lovepoem closed pull request #1380: upgrade libthrift version and add nature thrift support option

lovepoem closed pull request #1380: upgrade libthrift version and add nature thrift support option 
URL: https://github.com/apache/incubator-dubbo/pull/1380
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/dependencies-bom/pom.xml b/dependencies-bom/pom.xml
index 13f572629d..e72efc0c1d 100644
--- a/dependencies-bom/pom.xml
+++ b/dependencies-bom/pom.xml
@@ -85,7 +85,7 @@
         <jedis_version>2.9.0</jedis_version>
         <xmemcached_version>1.3.6</xmemcached_version>
         <cxf_version>3.0.14</cxf_version>
-        <thrift_version>0.8.0</thrift_version>
+        <thrift_version>0.11.0</thrift_version>
         <hessian_version>4.0.38</hessian_version>
         <servlet_version>3.1.0</servlet_version>
         <jetty_version>6.1.26</jetty_version>
diff --git a/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java
index 7af02b479c..72ab24ace4 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java
@@ -95,6 +95,8 @@
     private transient volatile boolean unexported;
 
     private volatile String generic;
+    //thrift原生协议的支持调用
+    private boolean nativeThrift = false;
 
     public ServiceConfig() {
     }
@@ -812,6 +814,14 @@ public void setGeneric(String generic) {
         }
     }
 
+    public boolean isNativeThrift() {
+        return nativeThrift;
+    }
+
+    public void setNativeThrift(boolean nativeThrift) {
+        this.nativeThrift = nativeThrift;
+    }
+
     public List<URL> getExportedUrls() {
         return urls;
     }
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/schema/DubboBeanDefinitionParser.java b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/schema/DubboBeanDefinitionParser.java
index c9c912d958..2844181dd0 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/schema/DubboBeanDefinitionParser.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/com/alibaba/dubbo/config/spring/schema/DubboBeanDefinitionParser.java
@@ -31,6 +31,7 @@
 import com.alibaba.dubbo.config.spring.ReferenceBean;
 import com.alibaba.dubbo.config.spring.ServiceBean;
 import com.alibaba.dubbo.rpc.Protocol;
+
 import org.springframework.beans.PropertyValue;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.config.BeanDefinitionHolder;
@@ -121,6 +122,11 @@ private static BeanDefinition parse(Element element, ParserContext parserContext
                 parseProperties(element.getChildNodes(), classDefinition);
                 beanDefinition.getPropertyValues().addPropertyValue("ref", new BeanDefinitionHolder(classDefinition, id + "Impl"));
             }
+            /**native thrift support*/
+            String isNativeThrift = element.getAttribute("nativethrift");
+            if (!StringUtils.isBlank(isNativeThrift)) {
+                beanDefinition.getPropertyValues().addPropertyValue("nativeThrift", Boolean.valueOf(isNativeThrift));
+            }
         } else if (ProviderConfig.class.equals(beanClass)) {
             parseNested(element, parserContext, ServiceBean.class, true, "service", "provider", id, beanDefinition);
         } else if (ConsumerConfig.class.equals(beanClass)) {
diff --git a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
index 4efbc585ab..1603727931 100644
--- a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
+++ b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
@@ -1111,6 +1111,11 @@
                         <xsd:documentation><![CDATA[ Generic service. ]]></xsd:documentation>
                     </xsd:annotation>
                 </xsd:attribute>
+                <xsd:attribute name="nativethrift" type="xsd:boolean" use="optional">
+                    <xsd:annotation>
+                        <xsd:documentation><![CDATA[ Use Native Thrift Protocol invoke the service implementation class. ]]></xsd:documentation>
+                    </xsd:annotation>
+                </xsd:attribute>
                 <xsd:anyAttribute namespace="##other" processContents="lax"/>
             </xsd:extension>
         </xsd:complexContent>
diff --git a/dubbo-demo/dubbo-demo-api/pom.xml b/dubbo-demo/dubbo-demo-api/pom.xml
index 9316cbaec3..b8906b1995 100644
--- a/dubbo-demo/dubbo-demo-api/pom.xml
+++ b/dubbo-demo/dubbo-demo-api/pom.xml
@@ -17,6 +17,12 @@
 <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.thrift</groupId>
+            <artifactId>libthrift</artifactId>
+        </dependency>
+    </dependencies>
     <parent>
         <groupId>com.alibaba</groupId>
         <artifactId>dubbo-demo</artifactId>
diff --git a/dubbo-demo/dubbo-demo-api/src/main/java/com/alibaba/dubbo/demo/DemoService.java b/dubbo-demo/dubbo-demo-api/src/main/java/com/alibaba/dubbo/demo/DemoService.java
index 6369c9785a..efa15df234 100644
--- a/dubbo-demo/dubbo-demo-api/src/main/java/com/alibaba/dubbo/demo/DemoService.java
+++ b/dubbo-demo/dubbo-demo-api/src/main/java/com/alibaba/dubbo/demo/DemoService.java
@@ -16,6 +16,9 @@
  */
 package com.alibaba.dubbo.demo;
 
+/**
+ * common service
+ */
 public interface DemoService {
 
     String sayHello(String name);
diff --git a/dubbo-demo/dubbo-demo-api/src/main/java/com/alibaba/dubbo/demo/ThriftDemoService.java b/dubbo-demo/dubbo-demo-api/src/main/java/com/alibaba/dubbo/demo/ThriftDemoService.java
new file mode 100644
index 0000000000..0368fa6224
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-api/src/main/java/com/alibaba/dubbo/demo/ThriftDemoService.java
@@ -0,0 +1,6123 @@
+/**
+ * Autogenerated by Thrift Compiler (0.11.0)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package com.alibaba.dubbo.demo;
+
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.11.0)", date = "2018-01-19")
+public class ThriftDemoService {
+
+    public interface Iface {
+
+        public boolean echoBool(boolean arg) throws org.apache.thrift.TException;
+
+        public byte echoByte(byte arg) throws org.apache.thrift.TException;
+
+        public short echoI16(short arg) throws org.apache.thrift.TException;
+
+        public int echoI32(int arg) throws org.apache.thrift.TException;
+
+        public long echoI64(long arg) throws org.apache.thrift.TException;
+
+        public double echoDouble(double arg) throws org.apache.thrift.TException;
+
+        public String echoString(String arg) throws org.apache.thrift.TException;
+
+    }
+
+    public interface AsyncIface {
+
+        public void echoBool(boolean arg, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler) throws org.apache.thrift.TException;
+
+        public void echoByte(byte arg, org.apache.thrift.async.AsyncMethodCallback<Byte> resultHandler) throws org.apache.thrift.TException;
+
+        public void echoI16(short arg, org.apache.thrift.async.AsyncMethodCallback<Short> resultHandler) throws org.apache.thrift.TException;
+
+        public void echoI32(int arg, org.apache.thrift.async.AsyncMethodCallback<Integer> resultHandler) throws org.apache.thrift.TException;
+
+        public void echoI64(long arg, org.apache.thrift.async.AsyncMethodCallback<Long> resultHandler) throws org.apache.thrift.TException;
+
+        public void echoDouble(double arg, org.apache.thrift.async.AsyncMethodCallback<Double> resultHandler) throws org.apache.thrift.TException;
+
+        public void echoString(String arg, org.apache.thrift.async.AsyncMethodCallback<String> resultHandler) throws org.apache.thrift.TException;
+
+    }
+
+    public static class Client extends org.apache.thrift.TServiceClient implements Iface {
+        public static class Factory implements org.apache.thrift.TServiceClientFactory<Client> {
+            public Factory() {}
+            public Client getClient(org.apache.thrift.protocol.TProtocol prot) {
+                return new Client(prot);
+            }
+            public Client getClient(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) {
+                return new Client(iprot, oprot);
+            }
+        }
+
+        public Client(org.apache.thrift.protocol.TProtocol prot)
+        {
+            super(prot, prot);
+        }
+
+        public Client(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) {
+            super(iprot, oprot);
+        }
+
+        public boolean echoBool(boolean arg) throws org.apache.thrift.TException
+        {
+            send_echoBool(arg);
+            return recv_echoBool();
+        }
+
+        public void send_echoBool(boolean arg) throws org.apache.thrift.TException
+        {
+            echoBool_args args = new echoBool_args();
+            args.setArg(arg);
+            sendBase("echoBool", args);
+        }
+
+        public boolean recv_echoBool() throws org.apache.thrift.TException
+        {
+            echoBool_result result = new echoBool_result();
+            receiveBase(result, "echoBool");
+            if (result.isSetSuccess()) {
+                return result.success;
+            }
+            throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echoBool failed: unknown result");
+        }
+
+        public byte echoByte(byte arg) throws org.apache.thrift.TException
+        {
+            send_echoByte(arg);
+            return recv_echoByte();
+        }
+
+        public void send_echoByte(byte arg) throws org.apache.thrift.TException
+        {
+            echoByte_args args = new echoByte_args();
+            args.setArg(arg);
+            sendBase("echoByte", args);
+        }
+
+        public byte recv_echoByte() throws org.apache.thrift.TException
+        {
+            echoByte_result result = new echoByte_result();
+            receiveBase(result, "echoByte");
+            if (result.isSetSuccess()) {
+                return result.success;
+            }
+            throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echoByte failed: unknown result");
+        }
+
+        public short echoI16(short arg) throws org.apache.thrift.TException
+        {
+            send_echoI16(arg);
+            return recv_echoI16();
+        }
+
+        public void send_echoI16(short arg) throws org.apache.thrift.TException
+        {
+            echoI16_args args = new echoI16_args();
+            args.setArg(arg);
+            sendBase("echoI16", args);
+        }
+
+        public short recv_echoI16() throws org.apache.thrift.TException
+        {
+            echoI16_result result = new echoI16_result();
+            receiveBase(result, "echoI16");
+            if (result.isSetSuccess()) {
+                return result.success;
+            }
+            throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echoI16 failed: unknown result");
+        }
+
+        public int echoI32(int arg) throws org.apache.thrift.TException
+        {
+            send_echoI32(arg);
+            return recv_echoI32();
+        }
+
+        public void send_echoI32(int arg) throws org.apache.thrift.TException
+        {
+            echoI32_args args = new echoI32_args();
+            args.setArg(arg);
+            sendBase("echoI32", args);
+        }
+
+        public int recv_echoI32() throws org.apache.thrift.TException
+        {
+            echoI32_result result = new echoI32_result();
+            receiveBase(result, "echoI32");
+            if (result.isSetSuccess()) {
+                return result.success;
+            }
+            throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echoI32 failed: unknown result");
+        }
+
+        public long echoI64(long arg) throws org.apache.thrift.TException
+        {
+            send_echoI64(arg);
+            return recv_echoI64();
+        }
+
+        public void send_echoI64(long arg) throws org.apache.thrift.TException
+        {
+            echoI64_args args = new echoI64_args();
+            args.setArg(arg);
+            sendBase("echoI64", args);
+        }
+
+        public long recv_echoI64() throws org.apache.thrift.TException
+        {
+            echoI64_result result = new echoI64_result();
+            receiveBase(result, "echoI64");
+            if (result.isSetSuccess()) {
+                return result.success;
+            }
+            throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echoI64 failed: unknown result");
+        }
+
+        public double echoDouble(double arg) throws org.apache.thrift.TException
+        {
+            send_echoDouble(arg);
+            return recv_echoDouble();
+        }
+
+        public void send_echoDouble(double arg) throws org.apache.thrift.TException
+        {
+            echoDouble_args args = new echoDouble_args();
+            args.setArg(arg);
+            sendBase("echoDouble", args);
+        }
+
+        public double recv_echoDouble() throws org.apache.thrift.TException
+        {
+            echoDouble_result result = new echoDouble_result();
+            receiveBase(result, "echoDouble");
+            if (result.isSetSuccess()) {
+                return result.success;
+            }
+            throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echoDouble failed: unknown result");
+        }
+
+        public String echoString(String arg) throws org.apache.thrift.TException
+        {
+            send_echoString(arg);
+            return recv_echoString();
+        }
+
+        public void send_echoString(String arg) throws org.apache.thrift.TException
+        {
+            echoString_args args = new echoString_args();
+            args.setArg(arg);
+            sendBase("echoString", args);
+        }
+
+        public String recv_echoString() throws org.apache.thrift.TException
+        {
+            echoString_result result = new echoString_result();
+            receiveBase(result, "echoString");
+            if (result.isSetSuccess()) {
+                return result.success;
+            }
+            throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echoString failed: unknown result");
+        }
+
+    }
+    public static class AsyncClient extends org.apache.thrift.async.TAsyncClient implements AsyncIface {
+        public static class Factory implements org.apache.thrift.async.TAsyncClientFactory<AsyncClient> {
+            private org.apache.thrift.async.TAsyncClientManager clientManager;
+            private org.apache.thrift.protocol.TProtocolFactory protocolFactory;
+            public Factory(org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.protocol.TProtocolFactory protocolFactory) {
+                this.clientManager = clientManager;
+                this.protocolFactory = protocolFactory;
+            }
+            public AsyncClient getAsyncClient(org.apache.thrift.transport.TNonblockingTransport transport) {
+                return new AsyncClient(protocolFactory, clientManager, transport);
+            }
+        }
+
+        public AsyncClient(org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.transport.TNonblockingTransport transport) {
+            super(protocolFactory, clientManager, transport);
+        }
+
+        public void echoBool(boolean arg, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler) throws org.apache.thrift.TException {
+            checkReady();
+            echoBool_call method_call = new echoBool_call(arg, resultHandler, this, ___protocolFactory, ___transport);
+            this.___currentMethod = method_call;
+            ___manager.call(method_call);
+        }
+
+        public static class echoBool_call extends org.apache.thrift.async.TAsyncMethodCall<Boolean> {
+            private boolean arg;
+            public echoBool_call(boolean arg, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+                super(client, protocolFactory, transport, resultHandler, false);
+                this.arg = arg;
+            }
+
+            public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+                prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("echoBool", org.apache.thrift.protocol.TMessageType.CALL, 0));
+                echoBool_args args = new echoBool_args();
+                args.setArg(arg);
+                args.write(prot);
+                prot.writeMessageEnd();
+            }
+
+            public Boolean getResult() throws org.apache.thrift.TException {
+                if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+                    throw new IllegalStateException("Method call not finished!");
+                }
+                org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+                org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+                return (new Client(prot)).recv_echoBool();
+            }
+        }
+
+        public void echoByte(byte arg, org.apache.thrift.async.AsyncMethodCallback<Byte> resultHandler) throws org.apache.thrift.TException {
+            checkReady();
+            echoByte_call method_call = new echoByte_call(arg, resultHandler, this, ___protocolFactory, ___transport);
+            this.___currentMethod = method_call;
+            ___manager.call(method_call);
+        }
+
+        public static class echoByte_call extends org.apache.thrift.async.TAsyncMethodCall<Byte> {
+            private byte arg;
+            public echoByte_call(byte arg, org.apache.thrift.async.AsyncMethodCallback<Byte> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+                super(client, protocolFactory, transport, resultHandler, false);
+                this.arg = arg;
+            }
+
+            public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+                prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("echoByte", org.apache.thrift.protocol.TMessageType.CALL, 0));
+                echoByte_args args = new echoByte_args();
+                args.setArg(arg);
+                args.write(prot);
+                prot.writeMessageEnd();
+            }
+
+            public Byte getResult() throws org.apache.thrift.TException {
+                if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+                    throw new IllegalStateException("Method call not finished!");
+                }
+                org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+                org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+                return (new Client(prot)).recv_echoByte();
+            }
+        }
+
+        public void echoI16(short arg, org.apache.thrift.async.AsyncMethodCallback<Short> resultHandler) throws org.apache.thrift.TException {
+            checkReady();
+            echoI16_call method_call = new echoI16_call(arg, resultHandler, this, ___protocolFactory, ___transport);
+            this.___currentMethod = method_call;
+            ___manager.call(method_call);
+        }
+
+        public static class echoI16_call extends org.apache.thrift.async.TAsyncMethodCall<Short> {
+            private short arg;
+            public echoI16_call(short arg, org.apache.thrift.async.AsyncMethodCallback<Short> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+                super(client, protocolFactory, transport, resultHandler, false);
+                this.arg = arg;
+            }
+
+            public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+                prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("echoI16", org.apache.thrift.protocol.TMessageType.CALL, 0));
+                echoI16_args args = new echoI16_args();
+                args.setArg(arg);
+                args.write(prot);
+                prot.writeMessageEnd();
+            }
+
+            public Short getResult() throws org.apache.thrift.TException {
+                if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+                    throw new IllegalStateException("Method call not finished!");
+                }
+                org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+                org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+                return (new Client(prot)).recv_echoI16();
+            }
+        }
+
+        public void echoI32(int arg, org.apache.thrift.async.AsyncMethodCallback<Integer> resultHandler) throws org.apache.thrift.TException {
+            checkReady();
+            echoI32_call method_call = new echoI32_call(arg, resultHandler, this, ___protocolFactory, ___transport);
+            this.___currentMethod = method_call;
+            ___manager.call(method_call);
+        }
+
+        public static class echoI32_call extends org.apache.thrift.async.TAsyncMethodCall<Integer> {
+            private int arg;
+            public echoI32_call(int arg, org.apache.thrift.async.AsyncMethodCallback<Integer> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+                super(client, protocolFactory, transport, resultHandler, false);
+                this.arg = arg;
+            }
+
+            public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+                prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("echoI32", org.apache.thrift.protocol.TMessageType.CALL, 0));
+                echoI32_args args = new echoI32_args();
+                args.setArg(arg);
+                args.write(prot);
+                prot.writeMessageEnd();
+            }
+
+            public Integer getResult() throws org.apache.thrift.TException {
+                if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+                    throw new IllegalStateException("Method call not finished!");
+                }
+                org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+                org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+                return (new Client(prot)).recv_echoI32();
+            }
+        }
+
+        public void echoI64(long arg, org.apache.thrift.async.AsyncMethodCallback<Long> resultHandler) throws org.apache.thrift.TException {
+            checkReady();
+            echoI64_call method_call = new echoI64_call(arg, resultHandler, this, ___protocolFactory, ___transport);
+            this.___currentMethod = method_call;
+            ___manager.call(method_call);
+        }
+
+        public static class echoI64_call extends org.apache.thrift.async.TAsyncMethodCall<Long> {
+            private long arg;
+            public echoI64_call(long arg, org.apache.thrift.async.AsyncMethodCallback<Long> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+                super(client, protocolFactory, transport, resultHandler, false);
+                this.arg = arg;
+            }
+
+            public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+                prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("echoI64", org.apache.thrift.protocol.TMessageType.CALL, 0));
+                echoI64_args args = new echoI64_args();
+                args.setArg(arg);
+                args.write(prot);
+                prot.writeMessageEnd();
+            }
+
+            public Long getResult() throws org.apache.thrift.TException {
+                if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+                    throw new IllegalStateException("Method call not finished!");
+                }
+                org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+                org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+                return (new Client(prot)).recv_echoI64();
+            }
+        }
+
+        public void echoDouble(double arg, org.apache.thrift.async.AsyncMethodCallback<Double> resultHandler) throws org.apache.thrift.TException {
+            checkReady();
+            echoDouble_call method_call = new echoDouble_call(arg, resultHandler, this, ___protocolFactory, ___transport);
+            this.___currentMethod = method_call;
+            ___manager.call(method_call);
+        }
+
+        public static class echoDouble_call extends org.apache.thrift.async.TAsyncMethodCall<Double> {
+            private double arg;
+            public echoDouble_call(double arg, org.apache.thrift.async.AsyncMethodCallback<Double> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+                super(client, protocolFactory, transport, resultHandler, false);
+                this.arg = arg;
+            }
+
+            public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+                prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("echoDouble", org.apache.thrift.protocol.TMessageType.CALL, 0));
+                echoDouble_args args = new echoDouble_args();
+                args.setArg(arg);
+                args.write(prot);
+                prot.writeMessageEnd();
+            }
+
+            public Double getResult() throws org.apache.thrift.TException {
+                if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+                    throw new IllegalStateException("Method call not finished!");
+                }
+                org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+                org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+                return (new Client(prot)).recv_echoDouble();
+            }
+        }
+
+        public void echoString(String arg, org.apache.thrift.async.AsyncMethodCallback<String> resultHandler) throws org.apache.thrift.TException {
+            checkReady();
+            echoString_call method_call = new echoString_call(arg, resultHandler, this, ___protocolFactory, ___transport);
+            this.___currentMethod = method_call;
+            ___manager.call(method_call);
+        }
+
+        public static class echoString_call extends org.apache.thrift.async.TAsyncMethodCall<String> {
+            private String arg;
+            public echoString_call(String arg, org.apache.thrift.async.AsyncMethodCallback<String> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+                super(client, protocolFactory, transport, resultHandler, false);
+                this.arg = arg;
+            }
+
+            public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+                prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("echoString", org.apache.thrift.protocol.TMessageType.CALL, 0));
+                echoString_args args = new echoString_args();
+                args.setArg(arg);
+                args.write(prot);
+                prot.writeMessageEnd();
+            }
+
+            public String getResult() throws org.apache.thrift.TException {
+                if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+                    throw new IllegalStateException("Method call not finished!");
+                }
+                org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+                org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+                return (new Client(prot)).recv_echoString();
+            }
+        }
+
+    }
+
+    public static class Processor<I extends Iface> extends org.apache.thrift.TBaseProcessor<I> implements org.apache.thrift.TProcessor {
+        private static final org.slf4j.Logger _LOGGER = org.slf4j.LoggerFactory.getLogger(Processor.class.getName());
+        public Processor(I iface) {
+            super(iface, getProcessMap(new java.util.HashMap<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>>()));
+        }
+
+        protected Processor(I iface, java.util.Map<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> processMap) {
+            super(iface, getProcessMap(processMap));
+        }
+
+        private static <I extends Iface> java.util.Map<String,  org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> getProcessMap(java.util.Map<String, org.apache.thrift.ProcessFunction<I, ? extends  org.apache.thrift.TBase>> processMap) {
+            processMap.put("echoBool", new echoBool());
+            processMap.put("echoByte", new echoByte());
+            processMap.put("echoI16", new echoI16());
+            processMap.put("echoI32", new echoI32());
+            processMap.put("echoI64", new echoI64());
+            processMap.put("echoDouble", new echoDouble());
+            processMap.put("echoString", new echoString());
+            return processMap;
+        }
+
+        public static class echoBool<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoBool_args> {
+            public echoBool() {
+                super("echoBool");
+            }
+
+            public echoBool_args getEmptyArgsInstance() {
+                return new echoBool_args();
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            @Override
+            protected boolean handleRuntimeExceptions() {
+                return false;
+            }
+
+            public echoBool_result getResult(I iface, echoBool_args args) throws org.apache.thrift.TException {
+                echoBool_result result = new echoBool_result();
+                result.success = iface.echoBool(args.arg);
+                result.setSuccessIsSet(true);
+                return result;
+            }
+        }
+
+        public static class echoByte<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoByte_args> {
+            public echoByte() {
+                super("echoByte");
+            }
+
+            public echoByte_args getEmptyArgsInstance() {
+                return new echoByte_args();
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            @Override
+            protected boolean handleRuntimeExceptions() {
+                return false;
+            }
+
+            public echoByte_result getResult(I iface, echoByte_args args) throws org.apache.thrift.TException {
+                echoByte_result result = new echoByte_result();
+                result.success = iface.echoByte(args.arg);
+                result.setSuccessIsSet(true);
+                return result;
+            }
+        }
+
+        public static class echoI16<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoI16_args> {
+            public echoI16() {
+                super("echoI16");
+            }
+
+            public echoI16_args getEmptyArgsInstance() {
+                return new echoI16_args();
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            @Override
+            protected boolean handleRuntimeExceptions() {
+                return false;
+            }
+
+            public echoI16_result getResult(I iface, echoI16_args args) throws org.apache.thrift.TException {
+                echoI16_result result = new echoI16_result();
+                result.success = iface.echoI16(args.arg);
+                result.setSuccessIsSet(true);
+                return result;
+            }
+        }
+
+        public static class echoI32<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoI32_args> {
+            public echoI32() {
+                super("echoI32");
+            }
+
+            public echoI32_args getEmptyArgsInstance() {
+                return new echoI32_args();
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            @Override
+            protected boolean handleRuntimeExceptions() {
+                return false;
+            }
+
+            public echoI32_result getResult(I iface, echoI32_args args) throws org.apache.thrift.TException {
+                echoI32_result result = new echoI32_result();
+                result.success = iface.echoI32(args.arg);
+                result.setSuccessIsSet(true);
+                return result;
+            }
+        }
+
+        public static class echoI64<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoI64_args> {
+            public echoI64() {
+                super("echoI64");
+            }
+
+            public echoI64_args getEmptyArgsInstance() {
+                return new echoI64_args();
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            @Override
+            protected boolean handleRuntimeExceptions() {
+                return false;
+            }
+
+            public echoI64_result getResult(I iface, echoI64_args args) throws org.apache.thrift.TException {
+                echoI64_result result = new echoI64_result();
+                result.success = iface.echoI64(args.arg);
+                result.setSuccessIsSet(true);
+                return result;
+            }
+        }
+
+        public static class echoDouble<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoDouble_args> {
+            public echoDouble() {
+                super("echoDouble");
+            }
+
+            public echoDouble_args getEmptyArgsInstance() {
+                return new echoDouble_args();
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            @Override
+            protected boolean handleRuntimeExceptions() {
+                return false;
+            }
+
+            public echoDouble_result getResult(I iface, echoDouble_args args) throws org.apache.thrift.TException {
+                echoDouble_result result = new echoDouble_result();
+                result.success = iface.echoDouble(args.arg);
+                result.setSuccessIsSet(true);
+                return result;
+            }
+        }
+
+        public static class echoString<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoString_args> {
+            public echoString() {
+                super("echoString");
+            }
+
+            public echoString_args getEmptyArgsInstance() {
+                return new echoString_args();
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            @Override
+            protected boolean handleRuntimeExceptions() {
+                return false;
+            }
+
+            public echoString_result getResult(I iface, echoString_args args) throws org.apache.thrift.TException {
+                echoString_result result = new echoString_result();
+                result.success = iface.echoString(args.arg);
+                return result;
+            }
+        }
+
+    }
+
+    public static class AsyncProcessor<I extends AsyncIface> extends org.apache.thrift.TBaseAsyncProcessor<I> {
+        private static final org.slf4j.Logger _LOGGER = org.slf4j.LoggerFactory.getLogger(AsyncProcessor.class.getName());
+        public AsyncProcessor(I iface) {
+            super(iface, getProcessMap(new java.util.HashMap<String, org.apache.thrift.AsyncProcessFunction<I, ? extends org.apache.thrift.TBase, ?>>()));
+        }
+
+        protected AsyncProcessor(I iface, java.util.Map<String,  org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase, ?>> processMap) {
+            super(iface, getProcessMap(processMap));
+        }
+
+        private static <I extends AsyncIface> java.util.Map<String,  org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase,?>> getProcessMap(java.util.Map<String,  org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase, ?>> processMap) {
+            processMap.put("echoBool", new echoBool());
+            processMap.put("echoByte", new echoByte());
+            processMap.put("echoI16", new echoI16());
+            processMap.put("echoI32", new echoI32());
+            processMap.put("echoI64", new echoI64());
+            processMap.put("echoDouble", new echoDouble());
+            processMap.put("echoString", new echoString());
+            return processMap;
+        }
+
+        public static class echoBool<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echoBool_args, Boolean> {
+            public echoBool() {
+                super("echoBool");
+            }
+
+            public echoBool_args getEmptyArgsInstance() {
+                return new echoBool_args();
+            }
+
+            public org.apache.thrift.async.AsyncMethodCallback<Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+                final org.apache.thrift.AsyncProcessFunction fcall = this;
+                return new org.apache.thrift.async.AsyncMethodCallback<Boolean>() {
+                    public void onComplete(Boolean o) {
+                        echoBool_result result = new echoBool_result();
+                        result.success = o;
+                        result.setSuccessIsSet(true);
+                        try {
+                            fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+                        } catch (org.apache.thrift.transport.TTransportException e) {
+                            _LOGGER.error("TTransportException writing to internal frame buffer", e);
+                            fb.close();
+                        } catch (Exception e) {
+                            _LOGGER.error("Exception writing to internal frame buffer", e);
+                            onError(e);
+                        }
+                    }
+                    public void onError(Exception e) {
+                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+                        org.apache.thrift.TSerializable msg;
+                        echoBool_result result = new echoBool_result();
+                        if (e instanceof org.apache.thrift.transport.TTransportException) {
+                            _LOGGER.error("TTransportException inside handler", e);
+                            fb.close();
+                            return;
+                        } else if (e instanceof org.apache.thrift.TApplicationException) {
+                            _LOGGER.error("TApplicationException inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = (org.apache.thrift.TApplicationException)e;
+                        } else {
+                            _LOGGER.error("Exception inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+                        }
+                        try {
+                            fcall.sendResponse(fb,msg,msgType,seqid);
+                        } catch (Exception ex) {
+                            _LOGGER.error("Exception writing to internal frame buffer", ex);
+                            fb.close();
+                        }
+                    }
+                };
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public void start(I iface, echoBool_args args, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler) throws org.apache.thrift.TException {
+                iface.echoBool(args.arg,resultHandler);
+            }
+        }
+
+        public static class echoByte<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echoByte_args, Byte> {
+            public echoByte() {
+                super("echoByte");
+            }
+
+            public echoByte_args getEmptyArgsInstance() {
+                return new echoByte_args();
+            }
+
+            public org.apache.thrift.async.AsyncMethodCallback<Byte> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+                final org.apache.thrift.AsyncProcessFunction fcall = this;
+                return new org.apache.thrift.async.AsyncMethodCallback<Byte>() {
+                    public void onComplete(Byte o) {
+                        echoByte_result result = new echoByte_result();
+                        result.success = o;
+                        result.setSuccessIsSet(true);
+                        try {
+                            fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+                        } catch (org.apache.thrift.transport.TTransportException e) {
+                            _LOGGER.error("TTransportException writing to internal frame buffer", e);
+                            fb.close();
+                        } catch (Exception e) {
+                            _LOGGER.error("Exception writing to internal frame buffer", e);
+                            onError(e);
+                        }
+                    }
+                    public void onError(Exception e) {
+                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+                        org.apache.thrift.TSerializable msg;
+                        echoByte_result result = new echoByte_result();
+                        if (e instanceof org.apache.thrift.transport.TTransportException) {
+                            _LOGGER.error("TTransportException inside handler", e);
+                            fb.close();
+                            return;
+                        } else if (e instanceof org.apache.thrift.TApplicationException) {
+                            _LOGGER.error("TApplicationException inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = (org.apache.thrift.TApplicationException)e;
+                        } else {
+                            _LOGGER.error("Exception inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+                        }
+                        try {
+                            fcall.sendResponse(fb,msg,msgType,seqid);
+                        } catch (Exception ex) {
+                            _LOGGER.error("Exception writing to internal frame buffer", ex);
+                            fb.close();
+                        }
+                    }
+                };
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public void start(I iface, echoByte_args args, org.apache.thrift.async.AsyncMethodCallback<Byte> resultHandler) throws org.apache.thrift.TException {
+                iface.echoByte(args.arg,resultHandler);
+            }
+        }
+
+        public static class echoI16<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echoI16_args, Short> {
+            public echoI16() {
+                super("echoI16");
+            }
+
+            public echoI16_args getEmptyArgsInstance() {
+                return new echoI16_args();
+            }
+
+            public org.apache.thrift.async.AsyncMethodCallback<Short> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+                final org.apache.thrift.AsyncProcessFunction fcall = this;
+                return new org.apache.thrift.async.AsyncMethodCallback<Short>() {
+                    public void onComplete(Short o) {
+                        echoI16_result result = new echoI16_result();
+                        result.success = o;
+                        result.setSuccessIsSet(true);
+                        try {
+                            fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+                        } catch (org.apache.thrift.transport.TTransportException e) {
+                            _LOGGER.error("TTransportException writing to internal frame buffer", e);
+                            fb.close();
+                        } catch (Exception e) {
+                            _LOGGER.error("Exception writing to internal frame buffer", e);
+                            onError(e);
+                        }
+                    }
+                    public void onError(Exception e) {
+                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+                        org.apache.thrift.TSerializable msg;
+                        echoI16_result result = new echoI16_result();
+                        if (e instanceof org.apache.thrift.transport.TTransportException) {
+                            _LOGGER.error("TTransportException inside handler", e);
+                            fb.close();
+                            return;
+                        } else if (e instanceof org.apache.thrift.TApplicationException) {
+                            _LOGGER.error("TApplicationException inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = (org.apache.thrift.TApplicationException)e;
+                        } else {
+                            _LOGGER.error("Exception inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+                        }
+                        try {
+                            fcall.sendResponse(fb,msg,msgType,seqid);
+                        } catch (Exception ex) {
+                            _LOGGER.error("Exception writing to internal frame buffer", ex);
+                            fb.close();
+                        }
+                    }
+                };
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public void start(I iface, echoI16_args args, org.apache.thrift.async.AsyncMethodCallback<Short> resultHandler) throws org.apache.thrift.TException {
+                iface.echoI16(args.arg,resultHandler);
+            }
+        }
+
+        public static class echoI32<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echoI32_args, Integer> {
+            public echoI32() {
+                super("echoI32");
+            }
+
+            public echoI32_args getEmptyArgsInstance() {
+                return new echoI32_args();
+            }
+
+            public org.apache.thrift.async.AsyncMethodCallback<Integer> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+                final org.apache.thrift.AsyncProcessFunction fcall = this;
+                return new org.apache.thrift.async.AsyncMethodCallback<Integer>() {
+                    public void onComplete(Integer o) {
+                        echoI32_result result = new echoI32_result();
+                        result.success = o;
+                        result.setSuccessIsSet(true);
+                        try {
+                            fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+                        } catch (org.apache.thrift.transport.TTransportException e) {
+                            _LOGGER.error("TTransportException writing to internal frame buffer", e);
+                            fb.close();
+                        } catch (Exception e) {
+                            _LOGGER.error("Exception writing to internal frame buffer", e);
+                            onError(e);
+                        }
+                    }
+                    public void onError(Exception e) {
+                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+                        org.apache.thrift.TSerializable msg;
+                        echoI32_result result = new echoI32_result();
+                        if (e instanceof org.apache.thrift.transport.TTransportException) {
+                            _LOGGER.error("TTransportException inside handler", e);
+                            fb.close();
+                            return;
+                        } else if (e instanceof org.apache.thrift.TApplicationException) {
+                            _LOGGER.error("TApplicationException inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = (org.apache.thrift.TApplicationException)e;
+                        } else {
+                            _LOGGER.error("Exception inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+                        }
+                        try {
+                            fcall.sendResponse(fb,msg,msgType,seqid);
+                        } catch (Exception ex) {
+                            _LOGGER.error("Exception writing to internal frame buffer", ex);
+                            fb.close();
+                        }
+                    }
+                };
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public void start(I iface, echoI32_args args, org.apache.thrift.async.AsyncMethodCallback<Integer> resultHandler) throws org.apache.thrift.TException {
+                iface.echoI32(args.arg,resultHandler);
+            }
+        }
+
+        public static class echoI64<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echoI64_args, Long> {
+            public echoI64() {
+                super("echoI64");
+            }
+
+            public echoI64_args getEmptyArgsInstance() {
+                return new echoI64_args();
+            }
+
+            public org.apache.thrift.async.AsyncMethodCallback<Long> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+                final org.apache.thrift.AsyncProcessFunction fcall = this;
+                return new org.apache.thrift.async.AsyncMethodCallback<Long>() {
+                    public void onComplete(Long o) {
+                        echoI64_result result = new echoI64_result();
+                        result.success = o;
+                        result.setSuccessIsSet(true);
+                        try {
+                            fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+                        } catch (org.apache.thrift.transport.TTransportException e) {
+                            _LOGGER.error("TTransportException writing to internal frame buffer", e);
+                            fb.close();
+                        } catch (Exception e) {
+                            _LOGGER.error("Exception writing to internal frame buffer", e);
+                            onError(e);
+                        }
+                    }
+                    public void onError(Exception e) {
+                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+                        org.apache.thrift.TSerializable msg;
+                        echoI64_result result = new echoI64_result();
+                        if (e instanceof org.apache.thrift.transport.TTransportException) {
+                            _LOGGER.error("TTransportException inside handler", e);
+                            fb.close();
+                            return;
+                        } else if (e instanceof org.apache.thrift.TApplicationException) {
+                            _LOGGER.error("TApplicationException inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = (org.apache.thrift.TApplicationException)e;
+                        } else {
+                            _LOGGER.error("Exception inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+                        }
+                        try {
+                            fcall.sendResponse(fb,msg,msgType,seqid);
+                        } catch (Exception ex) {
+                            _LOGGER.error("Exception writing to internal frame buffer", ex);
+                            fb.close();
+                        }
+                    }
+                };
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public void start(I iface, echoI64_args args, org.apache.thrift.async.AsyncMethodCallback<Long> resultHandler) throws org.apache.thrift.TException {
+                iface.echoI64(args.arg,resultHandler);
+            }
+        }
+
+        public static class echoDouble<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echoDouble_args, Double> {
+            public echoDouble() {
+                super("echoDouble");
+            }
+
+            public echoDouble_args getEmptyArgsInstance() {
+                return new echoDouble_args();
+            }
+
+            public org.apache.thrift.async.AsyncMethodCallback<Double> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+                final org.apache.thrift.AsyncProcessFunction fcall = this;
+                return new org.apache.thrift.async.AsyncMethodCallback<Double>() {
+                    public void onComplete(Double o) {
+                        echoDouble_result result = new echoDouble_result();
+                        result.success = o;
+                        result.setSuccessIsSet(true);
+                        try {
+                            fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+                        } catch (org.apache.thrift.transport.TTransportException e) {
+                            _LOGGER.error("TTransportException writing to internal frame buffer", e);
+                            fb.close();
+                        } catch (Exception e) {
+                            _LOGGER.error("Exception writing to internal frame buffer", e);
+                            onError(e);
+                        }
+                    }
+                    public void onError(Exception e) {
+                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+                        org.apache.thrift.TSerializable msg;
+                        echoDouble_result result = new echoDouble_result();
+                        if (e instanceof org.apache.thrift.transport.TTransportException) {
+                            _LOGGER.error("TTransportException inside handler", e);
+                            fb.close();
+                            return;
+                        } else if (e instanceof org.apache.thrift.TApplicationException) {
+                            _LOGGER.error("TApplicationException inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = (org.apache.thrift.TApplicationException)e;
+                        } else {
+                            _LOGGER.error("Exception inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+                        }
+                        try {
+                            fcall.sendResponse(fb,msg,msgType,seqid);
+                        } catch (Exception ex) {
+                            _LOGGER.error("Exception writing to internal frame buffer", ex);
+                            fb.close();
+                        }
+                    }
+                };
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public void start(I iface, echoDouble_args args, org.apache.thrift.async.AsyncMethodCallback<Double> resultHandler) throws org.apache.thrift.TException {
+                iface.echoDouble(args.arg,resultHandler);
+            }
+        }
+
+        public static class echoString<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echoString_args, String> {
+            public echoString() {
+                super("echoString");
+            }
+
+            public echoString_args getEmptyArgsInstance() {
+                return new echoString_args();
+            }
+
+            public org.apache.thrift.async.AsyncMethodCallback<String> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+                final org.apache.thrift.AsyncProcessFunction fcall = this;
+                return new org.apache.thrift.async.AsyncMethodCallback<String>() {
+                    public void onComplete(String o) {
+                        echoString_result result = new echoString_result();
+                        result.success = o;
+                        try {
+                            fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+                        } catch (org.apache.thrift.transport.TTransportException e) {
+                            _LOGGER.error("TTransportException writing to internal frame buffer", e);
+                            fb.close();
+                        } catch (Exception e) {
+                            _LOGGER.error("Exception writing to internal frame buffer", e);
+                            onError(e);
+                        }
+                    }
+                    public void onError(Exception e) {
+                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+                        org.apache.thrift.TSerializable msg;
+                        echoString_result result = new echoString_result();
+                        if (e instanceof org.apache.thrift.transport.TTransportException) {
+                            _LOGGER.error("TTransportException inside handler", e);
+                            fb.close();
+                            return;
+                        } else if (e instanceof org.apache.thrift.TApplicationException) {
+                            _LOGGER.error("TApplicationException inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = (org.apache.thrift.TApplicationException)e;
+                        } else {
+                            _LOGGER.error("Exception inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+                        }
+                        try {
+                            fcall.sendResponse(fb,msg,msgType,seqid);
+                        } catch (Exception ex) {
+                            _LOGGER.error("Exception writing to internal frame buffer", ex);
+                            fb.close();
+                        }
+                    }
+                };
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public void start(I iface, echoString_args args, org.apache.thrift.async.AsyncMethodCallback<String> resultHandler) throws org.apache.thrift.TException {
+                iface.echoString(args.arg,resultHandler);
+            }
+        }
+
+    }
+
+    public static class echoBool_args implements org.apache.thrift.TBase<echoBool_args, echoBool_args._Fields>, java.io.Serializable, Cloneable, Comparable<echoBool_args>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoBool_args");
+
+        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.BOOL, (short)1);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoBool_argsStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoBool_argsTupleSchemeFactory();
+
+        public boolean arg; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            ARG((short)1, "arg");
+
+            private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, or null if its not found.
+             */
+            public static _Fields findByThriftId(int fieldId) {
+                switch(fieldId) {
+                    case 1: // ARG
+                        return ARG;
+                    default:
+                        return null;
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, throwing an exception
+             * if it is not found.
+             */
+            public static _Fields findByThriftIdOrThrow(int fieldId) {
+                _Fields fields = findByThriftId(fieldId);
+                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                return fields;
+            }
+
+            /**
+             * Find the _Fields constant that matches name, or null if its not found.
+             */
+            public static _Fields findByName(String name) {
+                return byName.get(name);
+            }
+
+            private final short _thriftId;
+            private final String _fieldName;
+
+            _Fields(short thriftId, String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
+            public short getThriftFieldId() {
+                return _thriftId;
+            }
+
+            public String getFieldName() {
+                return _fieldName;
+            }
+        }
+
+        // isset id assignments
+        private static final int __ARG_ISSET_ID = 0;
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+        static {
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            tmpMap.put(_Fields.ARG, new org.apache.thrift.meta_data.FieldMetaData("arg", org.apache.thrift.TFieldRequirementType.REQUIRED,
+                                                                                  new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoBool_args.class, metaDataMap);
+        }
+
+        public echoBool_args() {
+        }
+
+        public echoBool_args(
+                boolean arg)
+        {
+            this();
+            this.arg = arg;
+            setArgIsSet(true);
+        }
+
+        /**
+         * Performs a deep copy on <i>other</i>.
+         */
+        public echoBool_args(echoBool_args other) {
+            __isset_bitfield = other.__isset_bitfield;
+            this.arg = other.arg;
+        }
+
+        public echoBool_args deepCopy() {
+            return new echoBool_args(this);
+        }
+
+        @Override
+        public void clear() {
+            setArgIsSet(false);
+            this.arg = false;
+        }
+
+        public boolean isArg() {
+            return this.arg;
+        }
+
+        public echoBool_args setArg(boolean arg) {
+            this.arg = arg;
+            setArgIsSet(true);
+            return this;
+        }
+
+        public void unsetArg() {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __ARG_ISSET_ID);
+        }
+
+        /** Returns true if field arg is set (has been assigned a value) and false otherwise */
+        public boolean isSetArg() {
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __ARG_ISSET_ID);
+        }
+
+        public void setArgIsSet(boolean value) {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __ARG_ISSET_ID, value);
+        }
+
+        public void setFieldValue(_Fields field, Object value) {
+            switch (field) {
+                case ARG:
+                    if (value == null) {
+                        unsetArg();
+                    } else {
+                        setArg((Boolean)value);
+                    }
+                    break;
+
+            }
+        }
+
+        public Object getFieldValue(_Fields field) {
+            switch (field) {
+                case ARG:
+                    return isArg();
+
+            }
+            throw new IllegalStateException();
+        }
+
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+        public boolean isSet(_Fields field) {
+            if (field == null) {
+                throw new IllegalArgumentException();
+            }
+
+            switch (field) {
+                case ARG:
+                    return isSetArg();
+            }
+            throw new IllegalStateException();
+        }
+
+        @Override
+        public boolean equals(Object that) {
+            if (that == null)
+                return false;
+            if (that instanceof echoBool_args)
+                return this.equals((echoBool_args)that);
+            return false;
+        }
+
+        public boolean equals(echoBool_args that) {
+            if (that == null)
+                return false;
+            if (this == that)
+                return true;
+
+            boolean this_present_arg = true;
+            boolean that_present_arg = true;
+            if (this_present_arg || that_present_arg) {
+                if (!(this_present_arg && that_present_arg))
+                    return false;
+                if (this.arg != that.arg)
+                    return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + ((arg) ? 131071 : 524287);
+
+            return hashCode;
+        }
+
+        @Override
+        public int compareTo(echoBool_args other) {
+            if (!getClass().equals(other.getClass())) {
+                return getClass().getName().compareTo(other.getClass().getName());
+            }
+
+            int lastComparison = 0;
+
+            lastComparison = Boolean.valueOf(isSetArg()).compareTo(other.isSetArg());
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+            if (isSetArg()) {
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, other.arg);
+                if (lastComparison != 0) {
+                    return lastComparison;
+                }
+            }
+            return 0;
+        }
+
+        public _Fields fieldForId(int fieldId) {
+            return _Fields.findByThriftId(fieldId);
+        }
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+            scheme(iprot).read(iprot, this);
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+            scheme(oprot).write(oprot, this);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder("echoBool_args(");
+            boolean first = true;
+
+            sb.append("arg:");
+            sb.append(this.arg);
+            first = false;
+            sb.append(")");
+            return sb.toString();
+        }
+
+        public void validate() throws org.apache.thrift.TException {
+            // check for required fields
+            // alas, we cannot check 'arg' because it's a primitive and you chose the non-beans generator.
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+            try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoBool_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoBool_argsStandardScheme getScheme() {
+                return new echoBool_argsStandardScheme();
+            }
+        }
+
+        private static class echoBool_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoBool_args> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoBool_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 1: // ARG
+                            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+                                struct.arg = iprot.readBool();
+                                struct.setArgIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                if (!struct.isSetArg()) {
+                    throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
+                }
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoBool_args struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                oprot.writeFieldBegin(ARG_FIELD_DESC);
+                oprot.writeBool(struct.arg);
+                oprot.writeFieldEnd();
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoBool_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoBool_argsTupleScheme getScheme() {
+                return new echoBool_argsTupleScheme();
+            }
+        }
+
+        private static class echoBool_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoBool_args> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoBool_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                oprot.writeBool(struct.arg);
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoBool_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                struct.arg = iprot.readBool();
+                struct.setArgIsSet(true);
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoBool_result implements org.apache.thrift.TBase<echoBool_result, echoBool_result._Fields>, java.io.Serializable, Cloneable, Comparable<echoBool_result>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoBool_result");
+
+        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.BOOL, (short)0);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoBool_resultStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoBool_resultTupleSchemeFactory();
+
+        public boolean success; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            SUCCESS((short)0, "success");
+
+            private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, or null if its not found.
+             */
+            public static _Fields findByThriftId(int fieldId) {
+                switch(fieldId) {
+                    case 0: // SUCCESS
+                        return SUCCESS;
+                    default:
+                        return null;
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, throwing an exception
+             * if it is not found.
+             */
+            public static _Fields findByThriftIdOrThrow(int fieldId) {
+                _Fields fields = findByThriftId(fieldId);
+                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                return fields;
+            }
+
+            /**
+             * Find the _Fields constant that matches name, or null if its not found.
+             */
+            public static _Fields findByName(String name) {
+                return byName.get(name);
+            }
+
+            private final short _thriftId;
+            private final String _fieldName;
+
+            _Fields(short thriftId, String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
+            public short getThriftFieldId() {
+                return _thriftId;
+            }
+
+            public String getFieldName() {
+                return _fieldName;
+            }
+        }
+
+        // isset id assignments
+        private static final int __SUCCESS_ISSET_ID = 0;
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+        static {
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
+                                                                                      new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoBool_result.class, metaDataMap);
+        }
+
+        public echoBool_result() {
+        }
+
+        public echoBool_result(
+                boolean success)
+        {
+            this();
+            this.success = success;
+            setSuccessIsSet(true);
+        }
+
+        /**
+         * Performs a deep copy on <i>other</i>.
+         */
+        public echoBool_result(echoBool_result other) {
+            __isset_bitfield = other.__isset_bitfield;
+            this.success = other.success;
+        }
+
+        public echoBool_result deepCopy() {
+            return new echoBool_result(this);
+        }
+
+        @Override
+        public void clear() {
+            setSuccessIsSet(false);
+            this.success = false;
+        }
+
+        public boolean isSuccess() {
+            return this.success;
+        }
+
+        public echoBool_result setSuccess(boolean success) {
+            this.success = success;
+            setSuccessIsSet(true);
+            return this;
+        }
+
+        public void unsetSuccess() {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+        }
+
+        /** Returns true if field success is set (has been assigned a value) and false otherwise */
+        public boolean isSetSuccess() {
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+        }
+
+        public void setSuccessIsSet(boolean value) {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
+        }
+
+        public void setFieldValue(_Fields field, Object value) {
+            switch (field) {
+                case SUCCESS:
+                    if (value == null) {
+                        unsetSuccess();
+                    } else {
+                        setSuccess((Boolean)value);
+                    }
+                    break;
+
+            }
+        }
+
+        public Object getFieldValue(_Fields field) {
+            switch (field) {
+                case SUCCESS:
+                    return isSuccess();
+
+            }
+            throw new IllegalStateException();
+        }
+
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+        public boolean isSet(_Fields field) {
+            if (field == null) {
+                throw new IllegalArgumentException();
+            }
+
+            switch (field) {
+                case SUCCESS:
+                    return isSetSuccess();
+            }
+            throw new IllegalStateException();
+        }
+
+        @Override
+        public boolean equals(Object that) {
+            if (that == null)
+                return false;
+            if (that instanceof echoBool_result)
+                return this.equals((echoBool_result)that);
+            return false;
+        }
+
+        public boolean equals(echoBool_result that) {
+            if (that == null)
+                return false;
+            if (this == that)
+                return true;
+
+            boolean this_present_success = true;
+            boolean that_present_success = true;
+            if (this_present_success || that_present_success) {
+                if (!(this_present_success && that_present_success))
+                    return false;
+                if (this.success != that.success)
+                    return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + ((success) ? 131071 : 524287);
+
+            return hashCode;
+        }
+
+        @Override
+        public int compareTo(echoBool_result other) {
+            if (!getClass().equals(other.getClass())) {
+                return getClass().getName().compareTo(other.getClass().getName());
+            }
+
+            int lastComparison = 0;
+
+            lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+            if (isSetSuccess()) {
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+                if (lastComparison != 0) {
+                    return lastComparison;
+                }
+            }
+            return 0;
+        }
+
+        public _Fields fieldForId(int fieldId) {
+            return _Fields.findByThriftId(fieldId);
+        }
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+            scheme(iprot).read(iprot, this);
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+            scheme(oprot).write(oprot, this);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder("echoBool_result(");
+            boolean first = true;
+
+            sb.append("success:");
+            sb.append(this.success);
+            first = false;
+            sb.append(")");
+            return sb.toString();
+        }
+
+        public void validate() throws org.apache.thrift.TException {
+            // check for required fields
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+            try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoBool_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoBool_resultStandardScheme getScheme() {
+                return new echoBool_resultStandardScheme();
+            }
+        }
+
+        private static class echoBool_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoBool_result> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoBool_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 0: // SUCCESS
+                            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+                                struct.success = iprot.readBool();
+                                struct.setSuccessIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoBool_result struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.isSetSuccess()) {
+                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+                    oprot.writeBool(struct.success);
+                    oprot.writeFieldEnd();
+                }
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoBool_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoBool_resultTupleScheme getScheme() {
+                return new echoBool_resultTupleScheme();
+            }
+        }
+
+        private static class echoBool_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoBool_result> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoBool_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet optionals = new java.util.BitSet();
+                if (struct.isSetSuccess()) {
+                    optionals.set(0);
+                }
+                oprot.writeBitSet(optionals, 1);
+                if (struct.isSetSuccess()) {
+                    oprot.writeBool(struct.success);
+                }
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoBool_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet incoming = iprot.readBitSet(1);
+                if (incoming.get(0)) {
+                    struct.success = iprot.readBool();
+                    struct.setSuccessIsSet(true);
+                }
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoByte_args implements org.apache.thrift.TBase<echoByte_args, echoByte_args._Fields>, java.io.Serializable, Cloneable, Comparable<echoByte_args>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoByte_args");
+
+        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.BYTE, (short)1);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoByte_argsStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoByte_argsTupleSchemeFactory();
+
+        public byte arg; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            ARG((short)1, "arg");
+
+            private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, or null if its not found.
+             */
+            public static _Fields findByThriftId(int fieldId) {
+                switch(fieldId) {
+                    case 1: // ARG
+                        return ARG;
+                    default:
+                        return null;
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, throwing an exception
+             * if it is not found.
+             */
+            public static _Fields findByThriftIdOrThrow(int fieldId) {
+                _Fields fields = findByThriftId(fieldId);
+                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                return fields;
+            }
+
+            /**
+             * Find the _Fields constant that matches name, or null if its not found.
+             */
+            public static _Fields findByName(String name) {
+                return byName.get(name);
+            }
+
+            private final short _thriftId;
+            private final String _fieldName;
+
+            _Fields(short thriftId, String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
+            public short getThriftFieldId() {
+                return _thriftId;
+            }
+
+            public String getFieldName() {
+                return _fieldName;
+            }
+        }
+
+        // isset id assignments
+        private static final int __ARG_ISSET_ID = 0;
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+        static {
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            tmpMap.put(_Fields.ARG, new org.apache.thrift.meta_data.FieldMetaData("arg", org.apache.thrift.TFieldRequirementType.REQUIRED,
+                                                                                  new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BYTE)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoByte_args.class, metaDataMap);
+        }
+
+        public echoByte_args() {
+        }
+
+        public echoByte_args(
+                byte arg)
+        {
+            this();
+            this.arg = arg;
+            setArgIsSet(true);
+        }
+
+        /**
+         * Performs a deep copy on <i>other</i>.
+         */
+        public echoByte_args(echoByte_args other) {
+            __isset_bitfield = other.__isset_bitfield;
+            this.arg = other.arg;
+        }
+
+        public echoByte_args deepCopy() {
+            return new echoByte_args(this);
+        }
+
+        @Override
+        public void clear() {
+            setArgIsSet(false);
+            this.arg = 0;
+        }
+
+        public byte getArg() {
+            return this.arg;
+        }
+
+        public echoByte_args setArg(byte arg) {
+            this.arg = arg;
+            setArgIsSet(true);
+            return this;
+        }
+
+        public void unsetArg() {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __ARG_ISSET_ID);
+        }
+
+        /** Returns true if field arg is set (has been assigned a value) and false otherwise */
+        public boolean isSetArg() {
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __ARG_ISSET_ID);
+        }
+
+        public void setArgIsSet(boolean value) {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __ARG_ISSET_ID, value);
+        }
+
+        public void setFieldValue(_Fields field, Object value) {
+            switch (field) {
+                case ARG:
+                    if (value == null) {
+                        unsetArg();
+                    } else {
+                        setArg((Byte)value);
+                    }
+                    break;
+
+            }
+        }
+
+        public Object getFieldValue(_Fields field) {
+            switch (field) {
+                case ARG:
+                    return getArg();
+
+            }
+            throw new IllegalStateException();
+        }
+
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+        public boolean isSet(_Fields field) {
+            if (field == null) {
+                throw new IllegalArgumentException();
+            }
+
+            switch (field) {
+                case ARG:
+                    return isSetArg();
+            }
+            throw new IllegalStateException();
+        }
+
+        @Override
+        public boolean equals(Object that) {
+            if (that == null)
+                return false;
+            if (that instanceof echoByte_args)
+                return this.equals((echoByte_args)that);
+            return false;
+        }
+
+        public boolean equals(echoByte_args that) {
+            if (that == null)
+                return false;
+            if (this == that)
+                return true;
+
+            boolean this_present_arg = true;
+            boolean that_present_arg = true;
+            if (this_present_arg || that_present_arg) {
+                if (!(this_present_arg && that_present_arg))
+                    return false;
+                if (this.arg != that.arg)
+                    return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + (int) (arg);
+
+            return hashCode;
+        }
+
+        @Override
+        public int compareTo(echoByte_args other) {
+            if (!getClass().equals(other.getClass())) {
+                return getClass().getName().compareTo(other.getClass().getName());
+            }
+
+            int lastComparison = 0;
+
+            lastComparison = Boolean.valueOf(isSetArg()).compareTo(other.isSetArg());
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+            if (isSetArg()) {
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, other.arg);
+                if (lastComparison != 0) {
+                    return lastComparison;
+                }
+            }
+            return 0;
+        }
+
+        public _Fields fieldForId(int fieldId) {
+            return _Fields.findByThriftId(fieldId);
+        }
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+            scheme(iprot).read(iprot, this);
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+            scheme(oprot).write(oprot, this);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder("echoByte_args(");
+            boolean first = true;
+
+            sb.append("arg:");
+            sb.append(this.arg);
+            first = false;
+            sb.append(")");
+            return sb.toString();
+        }
+
+        public void validate() throws org.apache.thrift.TException {
+            // check for required fields
+            // alas, we cannot check 'arg' because it's a primitive and you chose the non-beans generator.
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+            try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoByte_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoByte_argsStandardScheme getScheme() {
+                return new echoByte_argsStandardScheme();
+            }
+        }
+
+        private static class echoByte_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoByte_args> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoByte_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 1: // ARG
+                            if (schemeField.type == org.apache.thrift.protocol.TType.BYTE) {
+                                struct.arg = iprot.readByte();
+                                struct.setArgIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                if (!struct.isSetArg()) {
+                    throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
+                }
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoByte_args struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                oprot.writeFieldBegin(ARG_FIELD_DESC);
+                oprot.writeByte(struct.arg);
+                oprot.writeFieldEnd();
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoByte_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoByte_argsTupleScheme getScheme() {
+                return new echoByte_argsTupleScheme();
+            }
+        }
+
+        private static class echoByte_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoByte_args> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoByte_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                oprot.writeByte(struct.arg);
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoByte_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                struct.arg = iprot.readByte();
+                struct.setArgIsSet(true);
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoByte_result implements org.apache.thrift.TBase<echoByte_result, echoByte_result._Fields>, java.io.Serializable, Cloneable, Comparable<echoByte_result>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoByte_result");
+
+        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.BYTE, (short)0);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoByte_resultStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoByte_resultTupleSchemeFactory();
+
+        public byte success; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            SUCCESS((short)0, "success");
+
+            private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, or null if its not found.
+             */
+            public static _Fields findByThriftId(int fieldId) {
+                switch(fieldId) {
+                    case 0: // SUCCESS
+                        return SUCCESS;
+                    default:
+                        return null;
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, throwing an exception
+             * if it is not found.
+             */
+            public static _Fields findByThriftIdOrThrow(int fieldId) {
+                _Fields fields = findByThriftId(fieldId);
+                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                return fields;
+            }
+
+            /**
+             * Find the _Fields constant that matches name, or null if its not found.
+             */
+            public static _Fields findByName(String name) {
+                return byName.get(name);
+            }
+
+            private final short _thriftId;
+            private final String _fieldName;
+
+            _Fields(short thriftId, String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
+            public short getThriftFieldId() {
+                return _thriftId;
+            }
+
+            public String getFieldName() {
+                return _fieldName;
+            }
+        }
+
+        // isset id assignments
+        private static final int __SUCCESS_ISSET_ID = 0;
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+        static {
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
+                                                                                      new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BYTE)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoByte_result.class, metaDataMap);
+        }
+
+        public echoByte_result() {
+        }
+
+        public echoByte_result(
+                byte success)
+        {
+            this();
+            this.success = success;
+            setSuccessIsSet(true);
+        }
+
+        /**
+         * Performs a deep copy on <i>other</i>.
+         */
+        public echoByte_result(echoByte_result other) {
+            __isset_bitfield = other.__isset_bitfield;
+            this.success = other.success;
+        }
+
+        public echoByte_result deepCopy() {
+            return new echoByte_result(this);
+        }
+
+        @Override
+        public void clear() {
+            setSuccessIsSet(false);
+            this.success = 0;
+        }
+
+        public byte getSuccess() {
+            return this.success;
+        }
+
+        public echoByte_result setSuccess(byte success) {
+            this.success = success;
+            setSuccessIsSet(true);
+            return this;
+        }
+
+        public void unsetSuccess() {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+        }
+
+        /** Returns true if field success is set (has been assigned a value) and false otherwise */
+        public boolean isSetSuccess() {
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+        }
+
+        public void setSuccessIsSet(boolean value) {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
+        }
+
+        public void setFieldValue(_Fields field, Object value) {
+            switch (field) {
+                case SUCCESS:
+                    if (value == null) {
+                        unsetSuccess();
+                    } else {
+                        setSuccess((Byte)value);
+                    }
+                    break;
+
+            }
+        }
+
+        public Object getFieldValue(_Fields field) {
+            switch (field) {
+                case SUCCESS:
+                    return getSuccess();
+
+            }
+            throw new IllegalStateException();
+        }
+
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+        public boolean isSet(_Fields field) {
+            if (field == null) {
+                throw new IllegalArgumentException();
+            }
+
+            switch (field) {
+                case SUCCESS:
+                    return isSetSuccess();
+            }
+            throw new IllegalStateException();
+        }
+
+        @Override
+        public boolean equals(Object that) {
+            if (that == null)
+                return false;
+            if (that instanceof echoByte_result)
+                return this.equals((echoByte_result)that);
+            return false;
+        }
+
+        public boolean equals(echoByte_result that) {
+            if (that == null)
+                return false;
+            if (this == that)
+                return true;
+
+            boolean this_present_success = true;
+            boolean that_present_success = true;
+            if (this_present_success || that_present_success) {
+                if (!(this_present_success && that_present_success))
+                    return false;
+                if (this.success != that.success)
+                    return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + (int) (success);
+
+            return hashCode;
+        }
+
+        @Override
+        public int compareTo(echoByte_result other) {
+            if (!getClass().equals(other.getClass())) {
+                return getClass().getName().compareTo(other.getClass().getName());
+            }
+
+            int lastComparison = 0;
+
+            lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+            if (isSetSuccess()) {
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+                if (lastComparison != 0) {
+                    return lastComparison;
+                }
+            }
+            return 0;
+        }
+
+        public _Fields fieldForId(int fieldId) {
+            return _Fields.findByThriftId(fieldId);
+        }
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+            scheme(iprot).read(iprot, this);
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+            scheme(oprot).write(oprot, this);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder("echoByte_result(");
+            boolean first = true;
+
+            sb.append("success:");
+            sb.append(this.success);
+            first = false;
+            sb.append(")");
+            return sb.toString();
+        }
+
+        public void validate() throws org.apache.thrift.TException {
+            // check for required fields
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+            try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoByte_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoByte_resultStandardScheme getScheme() {
+                return new echoByte_resultStandardScheme();
+            }
+        }
+
+        private static class echoByte_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoByte_result> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoByte_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 0: // SUCCESS
+                            if (schemeField.type == org.apache.thrift.protocol.TType.BYTE) {
+                                struct.success = iprot.readByte();
+                                struct.setSuccessIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoByte_result struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.isSetSuccess()) {
+                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+                    oprot.writeByte(struct.success);
+                    oprot.writeFieldEnd();
+                }
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoByte_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoByte_resultTupleScheme getScheme() {
+                return new echoByte_resultTupleScheme();
+            }
+        }
+
+        private static class echoByte_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoByte_result> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoByte_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet optionals = new java.util.BitSet();
+                if (struct.isSetSuccess()) {
+                    optionals.set(0);
+                }
+                oprot.writeBitSet(optionals, 1);
+                if (struct.isSetSuccess()) {
+                    oprot.writeByte(struct.success);
+                }
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoByte_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet incoming = iprot.readBitSet(1);
+                if (incoming.get(0)) {
+                    struct.success = iprot.readByte();
+                    struct.setSuccessIsSet(true);
+                }
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoI16_args implements org.apache.thrift.TBase<echoI16_args, echoI16_args._Fields>, java.io.Serializable, Cloneable, Comparable<echoI16_args>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI16_args");
+
+        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.I16, (short)1);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoI16_argsStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoI16_argsTupleSchemeFactory();
+
+        public short arg; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            ARG((short)1, "arg");
+
+            private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, or null if its not found.
+             */
+            public static _Fields findByThriftId(int fieldId) {
+                switch(fieldId) {
+                    case 1: // ARG
+                        return ARG;
+                    default:
+                        return null;
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, throwing an exception
+             * if it is not found.
+             */
+            public static _Fields findByThriftIdOrThrow(int fieldId) {
+                _Fields fields = findByThriftId(fieldId);
+                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                return fields;
+            }
+
+            /**
+             * Find the _Fields constant that matches name, or null if its not found.
+             */
+            public static _Fields findByName(String name) {
+                return byName.get(name);
+            }
+
+            private final short _thriftId;
+            private final String _fieldName;
+
+            _Fields(short thriftId, String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
+            public short getThriftFieldId() {
+                return _thriftId;
+            }
+
+            public String getFieldName() {
+                return _fieldName;
+            }
+        }
+
+        // isset id assignments
+        private static final int __ARG_ISSET_ID = 0;
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+        static {
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            tmpMap.put(_Fields.ARG, new org.apache.thrift.meta_data.FieldMetaData("arg", org.apache.thrift.TFieldRequirementType.REQUIRED,
+                                                                                  new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I16)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoI16_args.class, metaDataMap);
+        }
+
+        public echoI16_args() {
+        }
+
+        public echoI16_args(
+                short arg)
+        {
+            this();
+            this.arg = arg;
+            setArgIsSet(true);
+        }
+
+        /**
+         * Performs a deep copy on <i>other</i>.
+         */
+        public echoI16_args(echoI16_args other) {
+            __isset_bitfield = other.__isset_bitfield;
+            this.arg = other.arg;
+        }
+
+        public echoI16_args deepCopy() {
+            return new echoI16_args(this);
+        }
+
+        @Override
+        public void clear() {
+            setArgIsSet(false);
+            this.arg = 0;
+        }
+
+        public short getArg() {
+            return this.arg;
+        }
+
+        public echoI16_args setArg(short arg) {
+            this.arg = arg;
+            setArgIsSet(true);
+            return this;
+        }
+
+        public void unsetArg() {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __ARG_ISSET_ID);
+        }
+
+        /** Returns true if field arg is set (has been assigned a value) and false otherwise */
+        public boolean isSetArg() {
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __ARG_ISSET_ID);
+        }
+
+        public void setArgIsSet(boolean value) {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __ARG_ISSET_ID, value);
+        }
+
+        public void setFieldValue(_Fields field, Object value) {
+            switch (field) {
+                case ARG:
+                    if (value == null) {
+                        unsetArg();
+                    } else {
+                        setArg((Short)value);
+                    }
+                    break;
+
+            }
+        }
+
+        public Object getFieldValue(_Fields field) {
+            switch (field) {
+                case ARG:
+                    return getArg();
+
+            }
+            throw new IllegalStateException();
+        }
+
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+        public boolean isSet(_Fields field) {
+            if (field == null) {
+                throw new IllegalArgumentException();
+            }
+
+            switch (field) {
+                case ARG:
+                    return isSetArg();
+            }
+            throw new IllegalStateException();
+        }
+
+        @Override
+        public boolean equals(Object that) {
+            if (that == null)
+                return false;
+            if (that instanceof echoI16_args)
+                return this.equals((echoI16_args)that);
+            return false;
+        }
+
+        public boolean equals(echoI16_args that) {
+            if (that == null)
+                return false;
+            if (this == that)
+                return true;
+
+            boolean this_present_arg = true;
+            boolean that_present_arg = true;
+            if (this_present_arg || that_present_arg) {
+                if (!(this_present_arg && that_present_arg))
+                    return false;
+                if (this.arg != that.arg)
+                    return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + arg;
+
+            return hashCode;
+        }
+
+        @Override
+        public int compareTo(echoI16_args other) {
+            if (!getClass().equals(other.getClass())) {
+                return getClass().getName().compareTo(other.getClass().getName());
+            }
+
+            int lastComparison = 0;
+
+            lastComparison = Boolean.valueOf(isSetArg()).compareTo(other.isSetArg());
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+            if (isSetArg()) {
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, other.arg);
+                if (lastComparison != 0) {
+                    return lastComparison;
+                }
+            }
+            return 0;
+        }
+
+        public _Fields fieldForId(int fieldId) {
+            return _Fields.findByThriftId(fieldId);
+        }
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+            scheme(iprot).read(iprot, this);
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+            scheme(oprot).write(oprot, this);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder("echoI16_args(");
+            boolean first = true;
+
+            sb.append("arg:");
+            sb.append(this.arg);
+            first = false;
+            sb.append(")");
+            return sb.toString();
+        }
+
+        public void validate() throws org.apache.thrift.TException {
+            // check for required fields
+            // alas, we cannot check 'arg' because it's a primitive and you chose the non-beans generator.
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+            try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoI16_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI16_argsStandardScheme getScheme() {
+                return new echoI16_argsStandardScheme();
+            }
+        }
+
+        private static class echoI16_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoI16_args> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoI16_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 1: // ARG
+                            if (schemeField.type == org.apache.thrift.protocol.TType.I16) {
+                                struct.arg = iprot.readI16();
+                                struct.setArgIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                if (!struct.isSetArg()) {
+                    throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
+                }
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoI16_args struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                oprot.writeFieldBegin(ARG_FIELD_DESC);
+                oprot.writeI16(struct.arg);
+                oprot.writeFieldEnd();
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoI16_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI16_argsTupleScheme getScheme() {
+                return new echoI16_argsTupleScheme();
+            }
+        }
+
+        private static class echoI16_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoI16_args> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoI16_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                oprot.writeI16(struct.arg);
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoI16_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                struct.arg = iprot.readI16();
+                struct.setArgIsSet(true);
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoI16_result implements org.apache.thrift.TBase<echoI16_result, echoI16_result._Fields>, java.io.Serializable, Cloneable, Comparable<echoI16_result>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI16_result");
+
+        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.I16, (short)0);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoI16_resultStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoI16_resultTupleSchemeFactory();
+
+        public short success; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            SUCCESS((short)0, "success");
+
+            private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, or null if its not found.
+             */
+            public static _Fields findByThriftId(int fieldId) {
+                switch(fieldId) {
+                    case 0: // SUCCESS
+                        return SUCCESS;
+                    default:
+                        return null;
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, throwing an exception
+             * if it is not found.
+             */
+            public static _Fields findByThriftIdOrThrow(int fieldId) {
+                _Fields fields = findByThriftId(fieldId);
+                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                return fields;
+            }
+
+            /**
+             * Find the _Fields constant that matches name, or null if its not found.
+             */
+            public static _Fields findByName(String name) {
+                return byName.get(name);
+            }
+
+            private final short _thriftId;
+            private final String _fieldName;
+
+            _Fields(short thriftId, String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
+            public short getThriftFieldId() {
+                return _thriftId;
+            }
+
+            public String getFieldName() {
+                return _fieldName;
+            }
+        }
+
+        // isset id assignments
+        private static final int __SUCCESS_ISSET_ID = 0;
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+        static {
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
+                                                                                      new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I16)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoI16_result.class, metaDataMap);
+        }
+
+        public echoI16_result() {
+        }
+
+        public echoI16_result(
+                short success)
+        {
+            this();
+            this.success = success;
+            setSuccessIsSet(true);
+        }
+
+        /**
+         * Performs a deep copy on <i>other</i>.
+         */
+        public echoI16_result(echoI16_result other) {
+            __isset_bitfield = other.__isset_bitfield;
+            this.success = other.success;
+        }
+
+        public echoI16_result deepCopy() {
+            return new echoI16_result(this);
+        }
+
+        @Override
+        public void clear() {
+            setSuccessIsSet(false);
+            this.success = 0;
+        }
+
+        public short getSuccess() {
+            return this.success;
+        }
+
+        public echoI16_result setSuccess(short success) {
+            this.success = success;
+            setSuccessIsSet(true);
+            return this;
+        }
+
+        public void unsetSuccess() {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+        }
+
+        /** Returns true if field success is set (has been assigned a value) and false otherwise */
+        public boolean isSetSuccess() {
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+        }
+
+        public void setSuccessIsSet(boolean value) {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
+        }
+
+        public void setFieldValue(_Fields field, Object value) {
+            switch (field) {
+                case SUCCESS:
+                    if (value == null) {
+                        unsetSuccess();
+                    } else {
+                        setSuccess((Short)value);
+                    }
+                    break;
+
+            }
+        }
+
+        public Object getFieldValue(_Fields field) {
+            switch (field) {
+                case SUCCESS:
+                    return getSuccess();
+
+            }
+            throw new IllegalStateException();
+        }
+
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+        public boolean isSet(_Fields field) {
+            if (field == null) {
+                throw new IllegalArgumentException();
+            }
+
+            switch (field) {
+                case SUCCESS:
+                    return isSetSuccess();
+            }
+            throw new IllegalStateException();
+        }
+
+        @Override
+        public boolean equals(Object that) {
+            if (that == null)
+                return false;
+            if (that instanceof echoI16_result)
+                return this.equals((echoI16_result)that);
+            return false;
+        }
+
+        public boolean equals(echoI16_result that) {
+            if (that == null)
+                return false;
+            if (this == that)
+                return true;
+
+            boolean this_present_success = true;
+            boolean that_present_success = true;
+            if (this_present_success || that_present_success) {
+                if (!(this_present_success && that_present_success))
+                    return false;
+                if (this.success != that.success)
+                    return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + success;
+
+            return hashCode;
+        }
+
+        @Override
+        public int compareTo(echoI16_result other) {
+            if (!getClass().equals(other.getClass())) {
+                return getClass().getName().compareTo(other.getClass().getName());
+            }
+
+            int lastComparison = 0;
+
+            lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+            if (isSetSuccess()) {
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+                if (lastComparison != 0) {
+                    return lastComparison;
+                }
+            }
+            return 0;
+        }
+
+        public _Fields fieldForId(int fieldId) {
+            return _Fields.findByThriftId(fieldId);
+        }
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+            scheme(iprot).read(iprot, this);
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+            scheme(oprot).write(oprot, this);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder("echoI16_result(");
+            boolean first = true;
+
+            sb.append("success:");
+            sb.append(this.success);
+            first = false;
+            sb.append(")");
+            return sb.toString();
+        }
+
+        public void validate() throws org.apache.thrift.TException {
+            // check for required fields
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+            try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoI16_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI16_resultStandardScheme getScheme() {
+                return new echoI16_resultStandardScheme();
+            }
+        }
+
+        private static class echoI16_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoI16_result> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoI16_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 0: // SUCCESS
+                            if (schemeField.type == org.apache.thrift.protocol.TType.I16) {
+                                struct.success = iprot.readI16();
+                                struct.setSuccessIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoI16_result struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.isSetSuccess()) {
+                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+                    oprot.writeI16(struct.success);
+                    oprot.writeFieldEnd();
+                }
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoI16_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI16_resultTupleScheme getScheme() {
+                return new echoI16_resultTupleScheme();
+            }
+        }
+
+        private static class echoI16_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoI16_result> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoI16_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet optionals = new java.util.BitSet();
+                if (struct.isSetSuccess()) {
+                    optionals.set(0);
+                }
+                oprot.writeBitSet(optionals, 1);
+                if (struct.isSetSuccess()) {
+                    oprot.writeI16(struct.success);
+                }
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoI16_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet incoming = iprot.readBitSet(1);
+                if (incoming.get(0)) {
+                    struct.success = iprot.readI16();
+                    struct.setSuccessIsSet(true);
+                }
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoI32_args implements org.apache.thrift.TBase<echoI32_args, echoI32_args._Fields>, java.io.Serializable, Cloneable, Comparable<echoI32_args>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI32_args");
+
+        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.I32, (short)1);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoI32_argsStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoI32_argsTupleSchemeFactory();
+
+        public int arg; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            ARG((short)1, "arg");
+
+            private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, or null if its not found.
+             */
+            public static _Fields findByThriftId(int fieldId) {
+                switch(fieldId) {
+                    case 1: // ARG
+                        return ARG;
+                    default:
+                        return null;
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, throwing an exception
+             * if it is not found.
+             */
+            public static _Fields findByThriftIdOrThrow(int fieldId) {
+                _Fields fields = findByThriftId(fieldId);
+                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                return fields;
+            }
+
+            /**
+             * Find the _Fields constant that matches name, or null if its not found.
+             */
+            public static _Fields findByName(String name) {
+                return byName.get(name);
+            }
+
+            private final short _thriftId;
+            private final String _fieldName;
+
+            _Fields(short thriftId, String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
+            public short getThriftFieldId() {
+                return _thriftId;
+            }
+
+            public String getFieldName() {
+                return _fieldName;
+            }
+        }
+
+        // isset id assignments
+        private static final int __ARG_ISSET_ID = 0;
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+        static {
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            tmpMap.put(_Fields.ARG, new org.apache.thrift.meta_data.FieldMetaData("arg", org.apache.thrift.TFieldRequirementType.REQUIRED,
+                                                                                  new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoI32_args.class, metaDataMap);
+        }
+
+        public echoI32_args() {
+        }
+
+        public echoI32_args(
+                int arg)
+        {
+            this();
+            this.arg = arg;
+            setArgIsSet(true);
+        }
+
+        /**
+         * Performs a deep copy on <i>other</i>.
+         */
+        public echoI32_args(echoI32_args other) {
+            __isset_bitfield = other.__isset_bitfield;
+            this.arg = other.arg;
+        }
+
+        public echoI32_args deepCopy() {
+            return new echoI32_args(this);
+        }
+
+        @Override
+        public void clear() {
+            setArgIsSet(false);
+            this.arg = 0;
+        }
+
+        public int getArg() {
+            return this.arg;
+        }
+
+        public echoI32_args setArg(int arg) {
+            this.arg = arg;
+            setArgIsSet(true);
+            return this;
+        }
+
+        public void unsetArg() {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __ARG_ISSET_ID);
+        }
+
+        /** Returns true if field arg is set (has been assigned a value) and false otherwise */
+        public boolean isSetArg() {
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __ARG_ISSET_ID);
+        }
+
+        public void setArgIsSet(boolean value) {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __ARG_ISSET_ID, value);
+        }
+
+        public void setFieldValue(_Fields field, Object value) {
+            switch (field) {
+                case ARG:
+                    if (value == null) {
+                        unsetArg();
+                    } else {
+                        setArg((Integer)value);
+                    }
+                    break;
+
+            }
+        }
+
+        public Object getFieldValue(_Fields field) {
+            switch (field) {
+                case ARG:
+                    return getArg();
+
+            }
+            throw new IllegalStateException();
+        }
+
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+        public boolean isSet(_Fields field) {
+            if (field == null) {
+                throw new IllegalArgumentException();
+            }
+
+            switch (field) {
+                case ARG:
+                    return isSetArg();
+            }
+            throw new IllegalStateException();
+        }
+
+        @Override
+        public boolean equals(Object that) {
+            if (that == null)
+                return false;
+            if (that instanceof echoI32_args)
+                return this.equals((echoI32_args)that);
+            return false;
+        }
+
+        public boolean equals(echoI32_args that) {
+            if (that == null)
+                return false;
+            if (this == that)
+                return true;
+
+            boolean this_present_arg = true;
+            boolean that_present_arg = true;
+            if (this_present_arg || that_present_arg) {
+                if (!(this_present_arg && that_present_arg))
+                    return false;
+                if (this.arg != that.arg)
+                    return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + arg;
+
+            return hashCode;
+        }
+
+        @Override
+        public int compareTo(echoI32_args other) {
+            if (!getClass().equals(other.getClass())) {
+                return getClass().getName().compareTo(other.getClass().getName());
+            }
+
+            int lastComparison = 0;
+
+            lastComparison = Boolean.valueOf(isSetArg()).compareTo(other.isSetArg());
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+            if (isSetArg()) {
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, other.arg);
+                if (lastComparison != 0) {
+                    return lastComparison;
+                }
+            }
+            return 0;
+        }
+
+        public _Fields fieldForId(int fieldId) {
+            return _Fields.findByThriftId(fieldId);
+        }
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+            scheme(iprot).read(iprot, this);
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+            scheme(oprot).write(oprot, this);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder("echoI32_args(");
+            boolean first = true;
+
+            sb.append("arg:");
+            sb.append(this.arg);
+            first = false;
+            sb.append(")");
+            return sb.toString();
+        }
+
+        public void validate() throws org.apache.thrift.TException {
+            // check for required fields
+            // alas, we cannot check 'arg' because it's a primitive and you chose the non-beans generator.
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+            try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoI32_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI32_argsStandardScheme getScheme() {
+                return new echoI32_argsStandardScheme();
+            }
+        }
+
+        private static class echoI32_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoI32_args> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoI32_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 1: // ARG
+                            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+                                struct.arg = iprot.readI32();
+                                struct.setArgIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                if (!struct.isSetArg()) {
+                    throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
+                }
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoI32_args struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                oprot.writeFieldBegin(ARG_FIELD_DESC);
+                oprot.writeI32(struct.arg);
+                oprot.writeFieldEnd();
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoI32_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI32_argsTupleScheme getScheme() {
+                return new echoI32_argsTupleScheme();
+            }
+        }
+
+        private static class echoI32_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoI32_args> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoI32_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                oprot.writeI32(struct.arg);
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoI32_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                struct.arg = iprot.readI32();
+                struct.setArgIsSet(true);
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoI32_result implements org.apache.thrift.TBase<echoI32_result, echoI32_result._Fields>, java.io.Serializable, Cloneable, Comparable<echoI32_result>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI32_result");
+
+        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.I32, (short)0);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoI32_resultStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoI32_resultTupleSchemeFactory();
+
+        public int success; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            SUCCESS((short)0, "success");
+
+            private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, or null if its not found.
+             */
+            public static _Fields findByThriftId(int fieldId) {
+                switch(fieldId) {
+                    case 0: // SUCCESS
+                        return SUCCESS;
+                    default:
+                        return null;
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, throwing an exception
+             * if it is not found.
+             */
+            public static _Fields findByThriftIdOrThrow(int fieldId) {
+                _Fields fields = findByThriftId(fieldId);
+                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                return fields;
+            }
+
+            /**
+             * Find the _Fields constant that matches name, or null if its not found.
+             */
+            public static _Fields findByName(String name) {
+                return byName.get(name);
+            }
+
+            private final short _thriftId;
+            private final String _fieldName;
+
+            _Fields(short thriftId, String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
+            public short getThriftFieldId() {
+                return _thriftId;
+            }
+
+            public String getFieldName() {
+                return _fieldName;
+            }
+        }
+
+        // isset id assignments
+        private static final int __SUCCESS_ISSET_ID = 0;
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+        static {
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
+                                                                                      new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoI32_result.class, metaDataMap);
+        }
+
+        public echoI32_result() {
+        }
+
+        public echoI32_result(
+                int success)
+        {
+            this();
+            this.success = success;
+            setSuccessIsSet(true);
+        }
+
+        /**
+         * Performs a deep copy on <i>other</i>.
+         */
+        public echoI32_result(echoI32_result other) {
+            __isset_bitfield = other.__isset_bitfield;
+            this.success = other.success;
+        }
+
+        public echoI32_result deepCopy() {
+            return new echoI32_result(this);
+        }
+
+        @Override
+        public void clear() {
+            setSuccessIsSet(false);
+            this.success = 0;
+        }
+
+        public int getSuccess() {
+            return this.success;
+        }
+
+        public echoI32_result setSuccess(int success) {
+            this.success = success;
+            setSuccessIsSet(true);
+            return this;
+        }
+
+        public void unsetSuccess() {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+        }
+
+        /** Returns true if field success is set (has been assigned a value) and false otherwise */
+        public boolean isSetSuccess() {
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+        }
+
+        public void setSuccessIsSet(boolean value) {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
+        }
+
+        public void setFieldValue(_Fields field, Object value) {
+            switch (field) {
+                case SUCCESS:
+                    if (value == null) {
+                        unsetSuccess();
+                    } else {
+                        setSuccess((Integer)value);
+                    }
+                    break;
+
+            }
+        }
+
+        public Object getFieldValue(_Fields field) {
+            switch (field) {
+                case SUCCESS:
+                    return getSuccess();
+
+            }
+            throw new IllegalStateException();
+        }
+
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+        public boolean isSet(_Fields field) {
+            if (field == null) {
+                throw new IllegalArgumentException();
+            }
+
+            switch (field) {
+                case SUCCESS:
+                    return isSetSuccess();
+            }
+            throw new IllegalStateException();
+        }
+
+        @Override
+        public boolean equals(Object that) {
+            if (that == null)
+                return false;
+            if (that instanceof echoI32_result)
+                return this.equals((echoI32_result)that);
+            return false;
+        }
+
+        public boolean equals(echoI32_result that) {
+            if (that == null)
+                return false;
+            if (this == that)
+                return true;
+
+            boolean this_present_success = true;
+            boolean that_present_success = true;
+            if (this_present_success || that_present_success) {
+                if (!(this_present_success && that_present_success))
+                    return false;
+                if (this.success != that.success)
+                    return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + success;
+
+            return hashCode;
+        }
+
+        @Override
+        public int compareTo(echoI32_result other) {
+            if (!getClass().equals(other.getClass())) {
+                return getClass().getName().compareTo(other.getClass().getName());
+            }
+
+            int lastComparison = 0;
+
+            lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+            if (isSetSuccess()) {
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+                if (lastComparison != 0) {
+                    return lastComparison;
+                }
+            }
+            return 0;
+        }
+
+        public _Fields fieldForId(int fieldId) {
+            return _Fields.findByThriftId(fieldId);
+        }
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+            scheme(iprot).read(iprot, this);
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+            scheme(oprot).write(oprot, this);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder("echoI32_result(");
+            boolean first = true;
+
+            sb.append("success:");
+            sb.append(this.success);
+            first = false;
+            sb.append(")");
+            return sb.toString();
+        }
+
+        public void validate() throws org.apache.thrift.TException {
+            // check for required fields
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+            try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoI32_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI32_resultStandardScheme getScheme() {
+                return new echoI32_resultStandardScheme();
+            }
+        }
+
+        private static class echoI32_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoI32_result> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoI32_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 0: // SUCCESS
+                            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+                                struct.success = iprot.readI32();
+                                struct.setSuccessIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoI32_result struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.isSetSuccess()) {
+                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+                    oprot.writeI32(struct.success);
+                    oprot.writeFieldEnd();
+                }
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoI32_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI32_resultTupleScheme getScheme() {
+                return new echoI32_resultTupleScheme();
+            }
+        }
+
+        private static class echoI32_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoI32_result> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoI32_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet optionals = new java.util.BitSet();
+                if (struct.isSetSuccess()) {
+                    optionals.set(0);
+                }
+                oprot.writeBitSet(optionals, 1);
+                if (struct.isSetSuccess()) {
+                    oprot.writeI32(struct.success);
+                }
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoI32_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet incoming = iprot.readBitSet(1);
+                if (incoming.get(0)) {
+                    struct.success = iprot.readI32();
+                    struct.setSuccessIsSet(true);
+                }
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoI64_args implements org.apache.thrift.TBase<echoI64_args, echoI64_args._Fields>, java.io.Serializable, Cloneable, Comparable<echoI64_args>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI64_args");
+
+        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.I64, (short)1);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoI64_argsStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoI64_argsTupleSchemeFactory();
+
+        public long arg; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            ARG((short)1, "arg");
+
+            private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, or null if its not found.
+             */
+            public static _Fields findByThriftId(int fieldId) {
+                switch(fieldId) {
+                    case 1: // ARG
+                        return ARG;
+                    default:
+                        return null;
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, throwing an exception
+             * if it is not found.
+             */
+            public static _Fields findByThriftIdOrThrow(int fieldId) {
+                _Fields fields = findByThriftId(fieldId);
+                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                return fields;
+            }
+
+            /**
+             * Find the _Fields constant that matches name, or null if its not found.
+             */
+            public static _Fields findByName(String name) {
+                return byName.get(name);
+            }
+
+            private final short _thriftId;
+            private final String _fieldName;
+
+            _Fields(short thriftId, String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
+            public short getThriftFieldId() {
+                return _thriftId;
+            }
+
+            public String getFieldName() {
+                return _fieldName;
+            }
+        }
+
+        // isset id assignments
+        private static final int __ARG_ISSET_ID = 0;
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+        static {
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            tmpMap.put(_Fields.ARG, new org.apache.thrift.meta_data.FieldMetaData("arg", org.apache.thrift.TFieldRequirementType.REQUIRED,
+                                                                                  new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoI64_args.class, metaDataMap);
+        }
+
+        public echoI64_args() {
+        }
+
+        public echoI64_args(
+                long arg)
+        {
+            this();
+            this.arg = arg;
+            setArgIsSet(true);
+        }
+
+        /**
+         * Performs a deep copy on <i>other</i>.
+         */
+        public echoI64_args(echoI64_args other) {
+            __isset_bitfield = other.__isset_bitfield;
+            this.arg = other.arg;
+        }
+
+        public echoI64_args deepCopy() {
+            return new echoI64_args(this);
+        }
+
+        @Override
+        public void clear() {
+            setArgIsSet(false);
+            this.arg = 0;
+        }
+
+        public long getArg() {
+            return this.arg;
+        }
+
+        public echoI64_args setArg(long arg) {
+            this.arg = arg;
+            setArgIsSet(true);
+            return this;
+        }
+
+        public void unsetArg() {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __ARG_ISSET_ID);
+        }
+
+        /** Returns true if field arg is set (has been assigned a value) and false otherwise */
+        public boolean isSetArg() {
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __ARG_ISSET_ID);
+        }
+
+        public void setArgIsSet(boolean value) {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __ARG_ISSET_ID, value);
+        }
+
+        public void setFieldValue(_Fields field, Object value) {
+            switch (field) {
+                case ARG:
+                    if (value == null) {
+                        unsetArg();
+                    } else {
+                        setArg((Long)value);
+                    }
+                    break;
+
+            }
+        }
+
+        public Object getFieldValue(_Fields field) {
+            switch (field) {
+                case ARG:
+                    return getArg();
+
+            }
+            throw new IllegalStateException();
+        }
+
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+        public boolean isSet(_Fields field) {
+            if (field == null) {
+                throw new IllegalArgumentException();
+            }
+
+            switch (field) {
+                case ARG:
+                    return isSetArg();
+            }
+            throw new IllegalStateException();
+        }
+
+        @Override
+        public boolean equals(Object that) {
+            if (that == null)
+                return false;
+            if (that instanceof echoI64_args)
+                return this.equals((echoI64_args)that);
+            return false;
+        }
+
+        public boolean equals(echoI64_args that) {
+            if (that == null)
+                return false;
+            if (this == that)
+                return true;
+
+            boolean this_present_arg = true;
+            boolean that_present_arg = true;
+            if (this_present_arg || that_present_arg) {
+                if (!(this_present_arg && that_present_arg))
+                    return false;
+                if (this.arg != that.arg)
+                    return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + org.apache.thrift.TBaseHelper.hashCode(arg);
+
+            return hashCode;
+        }
+
+        @Override
+        public int compareTo(echoI64_args other) {
+            if (!getClass().equals(other.getClass())) {
+                return getClass().getName().compareTo(other.getClass().getName());
+            }
+
+            int lastComparison = 0;
+
+            lastComparison = Boolean.valueOf(isSetArg()).compareTo(other.isSetArg());
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+            if (isSetArg()) {
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, other.arg);
+                if (lastComparison != 0) {
+                    return lastComparison;
+                }
+            }
+            return 0;
+        }
+
+        public _Fields fieldForId(int fieldId) {
+            return _Fields.findByThriftId(fieldId);
+        }
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+            scheme(iprot).read(iprot, this);
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+            scheme(oprot).write(oprot, this);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder("echoI64_args(");
+            boolean first = true;
+
+            sb.append("arg:");
+            sb.append(this.arg);
+            first = false;
+            sb.append(")");
+            return sb.toString();
+        }
+
+        public void validate() throws org.apache.thrift.TException {
+            // check for required fields
+            // alas, we cannot check 'arg' because it's a primitive and you chose the non-beans generator.
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+            try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoI64_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI64_argsStandardScheme getScheme() {
+                return new echoI64_argsStandardScheme();
+            }
+        }
+
+        private static class echoI64_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoI64_args> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoI64_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 1: // ARG
+                            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+                                struct.arg = iprot.readI64();
+                                struct.setArgIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                if (!struct.isSetArg()) {
+                    throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
+                }
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoI64_args struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                oprot.writeFieldBegin(ARG_FIELD_DESC);
+                oprot.writeI64(struct.arg);
+                oprot.writeFieldEnd();
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoI64_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI64_argsTupleScheme getScheme() {
+                return new echoI64_argsTupleScheme();
+            }
+        }
+
+        private static class echoI64_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoI64_args> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoI64_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                oprot.writeI64(struct.arg);
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoI64_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                struct.arg = iprot.readI64();
+                struct.setArgIsSet(true);
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoI64_result implements org.apache.thrift.TBase<echoI64_result, echoI64_result._Fields>, java.io.Serializable, Cloneable, Comparable<echoI64_result>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI64_result");
+
+        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.I64, (short)0);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoI64_resultStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoI64_resultTupleSchemeFactory();
+
+        public long success; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            SUCCESS((short)0, "success");
+
+            private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, or null if its not found.
+             */
+            public static _Fields findByThriftId(int fieldId) {
+                switch(fieldId) {
+                    case 0: // SUCCESS
+                        return SUCCESS;
+                    default:
+                        return null;
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, throwing an exception
+             * if it is not found.
+             */
+            public static _Fields findByThriftIdOrThrow(int fieldId) {
+                _Fields fields = findByThriftId(fieldId);
+                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                return fields;
+            }
+
+            /**
+             * Find the _Fields constant that matches name, or null if its not found.
+             */
+            public static _Fields findByName(String name) {
+                return byName.get(name);
+            }
+
+            private final short _thriftId;
+            private final String _fieldName;
+
+            _Fields(short thriftId, String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
+            public short getThriftFieldId() {
+                return _thriftId;
+            }
+
+            public String getFieldName() {
+                return _fieldName;
+            }
+        }
+
+        // isset id assignments
+        private static final int __SUCCESS_ISSET_ID = 0;
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+        static {
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
+                                                                                      new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoI64_result.class, metaDataMap);
+        }
+
+        public echoI64_result() {
+        }
+
+        public echoI64_result(
+                long success)
+        {
+            this();
+            this.success = success;
+            setSuccessIsSet(true);
+        }
+
+        /**
+         * Performs a deep copy on <i>other</i>.
+         */
+        public echoI64_result(echoI64_result other) {
+            __isset_bitfield = other.__isset_bitfield;
+            this.success = other.success;
+        }
+
+        public echoI64_result deepCopy() {
+            return new echoI64_result(this);
+        }
+
+        @Override
+        public void clear() {
+            setSuccessIsSet(false);
+            this.success = 0;
+        }
+
+        public long getSuccess() {
+            return this.success;
+        }
+
+        public echoI64_result setSuccess(long success) {
+            this.success = success;
+            setSuccessIsSet(true);
+            return this;
+        }
+
+        public void unsetSuccess() {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+        }
+
+        /** Returns true if field success is set (has been assigned a value) and false otherwise */
+        public boolean isSetSuccess() {
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+        }
+
+        public void setSuccessIsSet(boolean value) {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
+        }
+
+        public void setFieldValue(_Fields field, Object value) {
+            switch (field) {
+                case SUCCESS:
+                    if (value == null) {
+                        unsetSuccess();
+                    } else {
+                        setSuccess((Long)value);
+                    }
+                    break;
+
+            }
+        }
+
+        public Object getFieldValue(_Fields field) {
+            switch (field) {
+                case SUCCESS:
+                    return getSuccess();
+
+            }
+            throw new IllegalStateException();
+        }
+
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+        public boolean isSet(_Fields field) {
+            if (field == null) {
+                throw new IllegalArgumentException();
+            }
+
+            switch (field) {
+                case SUCCESS:
+                    return isSetSuccess();
+            }
+            throw new IllegalStateException();
+        }
+
+        @Override
+        public boolean equals(Object that) {
+            if (that == null)
+                return false;
+            if (that instanceof echoI64_result)
+                return this.equals((echoI64_result)that);
+            return false;
+        }
+
+        public boolean equals(echoI64_result that) {
+            if (that == null)
+                return false;
+            if (this == that)
+                return true;
+
+            boolean this_present_success = true;
+            boolean that_present_success = true;
+            if (this_present_success || that_present_success) {
+                if (!(this_present_success && that_present_success))
+                    return false;
+                if (this.success != that.success)
+                    return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + org.apache.thrift.TBaseHelper.hashCode(success);
+
+            return hashCode;
+        }
+
+        @Override
+        public int compareTo(echoI64_result other) {
+            if (!getClass().equals(other.getClass())) {
+                return getClass().getName().compareTo(other.getClass().getName());
+            }
+
+            int lastComparison = 0;
+
+            lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+            if (isSetSuccess()) {
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+                if (lastComparison != 0) {
+                    return lastComparison;
+                }
+            }
+            return 0;
+        }
+
+        public _Fields fieldForId(int fieldId) {
+            return _Fields.findByThriftId(fieldId);
+        }
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+            scheme(iprot).read(iprot, this);
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+            scheme(oprot).write(oprot, this);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder("echoI64_result(");
+            boolean first = true;
+
+            sb.append("success:");
+            sb.append(this.success);
+            first = false;
+            sb.append(")");
+            return sb.toString();
+        }
+
+        public void validate() throws org.apache.thrift.TException {
+            // check for required fields
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+            try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoI64_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI64_resultStandardScheme getScheme() {
+                return new echoI64_resultStandardScheme();
+            }
+        }
+
+        private static class echoI64_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoI64_result> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoI64_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 0: // SUCCESS
+                            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+                                struct.success = iprot.readI64();
+                                struct.setSuccessIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoI64_result struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.isSetSuccess()) {
+                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+                    oprot.writeI64(struct.success);
+                    oprot.writeFieldEnd();
+                }
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoI64_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI64_resultTupleScheme getScheme() {
+                return new echoI64_resultTupleScheme();
+            }
+        }
+
+        private static class echoI64_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoI64_result> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoI64_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet optionals = new java.util.BitSet();
+                if (struct.isSetSuccess()) {
+                    optionals.set(0);
+                }
+                oprot.writeBitSet(optionals, 1);
+                if (struct.isSetSuccess()) {
+                    oprot.writeI64(struct.success);
+                }
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoI64_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet incoming = iprot.readBitSet(1);
+                if (incoming.get(0)) {
+                    struct.success = iprot.readI64();
+                    struct.setSuccessIsSet(true);
+                }
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoDouble_args implements org.apache.thrift.TBase<echoDouble_args, echoDouble_args._Fields>, java.io.Serializable, Cloneable, Comparable<echoDouble_args>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoDouble_args");
+
+        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.DOUBLE, (short)1);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoDouble_argsStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoDouble_argsTupleSchemeFactory();
+
+        public double arg; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            ARG((short)1, "arg");
+
+            private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, or null if its not found.
+             */
+            public static _Fields findByThriftId(int fieldId) {
+                switch(fieldId) {
+                    case 1: // ARG
+                        return ARG;
+                    default:
+                        return null;
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, throwing an exception
+             * if it is not found.
+             */
+            public static _Fields findByThriftIdOrThrow(int fieldId) {
+                _Fields fields = findByThriftId(fieldId);
+                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                return fields;
+            }
+
+            /**
+             * Find the _Fields constant that matches name, or null if its not found.
+             */
+            public static _Fields findByName(String name) {
+                return byName.get(name);
+            }
+
+            private final short _thriftId;
+            private final String _fieldName;
+
+            _Fields(short thriftId, String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
+            public short getThriftFieldId() {
+                return _thriftId;
+            }
+
+            public String getFieldName() {
+                return _fieldName;
+            }
+        }
+
+        // isset id assignments
+        private static final int __ARG_ISSET_ID = 0;
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+        static {
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            tmpMap.put(_Fields.ARG, new org.apache.thrift.meta_data.FieldMetaData("arg", org.apache.thrift.TFieldRequirementType.REQUIRED,
+                                                                                  new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoDouble_args.class, metaDataMap);
+        }
+
+        public echoDouble_args() {
+        }
+
+        public echoDouble_args(
+                double arg)
+        {
+            this();
+            this.arg = arg;
+            setArgIsSet(true);
+        }
+
+        /**
+         * Performs a deep copy on <i>other</i>.
+         */
+        public echoDouble_args(echoDouble_args other) {
+            __isset_bitfield = other.__isset_bitfield;
+            this.arg = other.arg;
+        }
+
+        public echoDouble_args deepCopy() {
+            return new echoDouble_args(this);
+        }
+
+        @Override
+        public void clear() {
+            setArgIsSet(false);
+            this.arg = 0.0;
+        }
+
+        public double getArg() {
+            return this.arg;
+        }
+
+        public echoDouble_args setArg(double arg) {
+            this.arg = arg;
+            setArgIsSet(true);
+            return this;
+        }
+
+        public void unsetArg() {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __ARG_ISSET_ID);
+        }
+
+        /** Returns true if field arg is set (has been assigned a value) and false otherwise */
+        public boolean isSetArg() {
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __ARG_ISSET_ID);
+        }
+
+        public void setArgIsSet(boolean value) {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __ARG_ISSET_ID, value);
+        }
+
+        public void setFieldValue(_Fields field, Object value) {
+            switch (field) {
+                case ARG:
+                    if (value == null) {
+                        unsetArg();
+                    } else {
+                        setArg((Double)value);
+                    }
+                    break;
+
+            }
+        }
+
+        public Object getFieldValue(_Fields field) {
+            switch (field) {
+                case ARG:
+                    return getArg();
+
+            }
+            throw new IllegalStateException();
+        }
+
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+        public boolean isSet(_Fields field) {
+            if (field == null) {
+                throw new IllegalArgumentException();
+            }
+
+            switch (field) {
+                case ARG:
+                    return isSetArg();
+            }
+            throw new IllegalStateException();
+        }
+
+        @Override
+        public boolean equals(Object that) {
+            if (that == null)
+                return false;
+            if (that instanceof echoDouble_args)
+                return this.equals((echoDouble_args)that);
+            return false;
+        }
+
+        public boolean equals(echoDouble_args that) {
+            if (that == null)
+                return false;
+            if (this == that)
+                return true;
+
+            boolean this_present_arg = true;
+            boolean that_present_arg = true;
+            if (this_present_arg || that_present_arg) {
+                if (!(this_present_arg && that_present_arg))
+                    return false;
+                if (this.arg != that.arg)
+                    return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + org.apache.thrift.TBaseHelper.hashCode(arg);
+
+            return hashCode;
+        }
+
+        @Override
+        public int compareTo(echoDouble_args other) {
+            if (!getClass().equals(other.getClass())) {
+                return getClass().getName().compareTo(other.getClass().getName());
+            }
+
+            int lastComparison = 0;
+
+            lastComparison = Boolean.valueOf(isSetArg()).compareTo(other.isSetArg());
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+            if (isSetArg()) {
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, other.arg);
+                if (lastComparison != 0) {
+                    return lastComparison;
+                }
+            }
+            return 0;
+        }
+
+        public _Fields fieldForId(int fieldId) {
+            return _Fields.findByThriftId(fieldId);
+        }
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+            scheme(iprot).read(iprot, this);
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+            scheme(oprot).write(oprot, this);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder("echoDouble_args(");
+            boolean first = true;
+
+            sb.append("arg:");
+            sb.append(this.arg);
+            first = false;
+            sb.append(")");
+            return sb.toString();
+        }
+
+        public void validate() throws org.apache.thrift.TException {
+            // check for required fields
+            // alas, we cannot check 'arg' because it's a primitive and you chose the non-beans generator.
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+            try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoDouble_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoDouble_argsStandardScheme getScheme() {
+                return new echoDouble_argsStandardScheme();
+            }
+        }
+
+        private static class echoDouble_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoDouble_args> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoDouble_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 1: // ARG
+                            if (schemeField.type == org.apache.thrift.protocol.TType.DOUBLE) {
+                                struct.arg = iprot.readDouble();
+                                struct.setArgIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                if (!struct.isSetArg()) {
+                    throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
+                }
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoDouble_args struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                oprot.writeFieldBegin(ARG_FIELD_DESC);
+                oprot.writeDouble(struct.arg);
+                oprot.writeFieldEnd();
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoDouble_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoDouble_argsTupleScheme getScheme() {
+                return new echoDouble_argsTupleScheme();
+            }
+        }
+
+        private static class echoDouble_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoDouble_args> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoDouble_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                oprot.writeDouble(struct.arg);
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoDouble_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                struct.arg = iprot.readDouble();
+                struct.setArgIsSet(true);
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoDouble_result implements org.apache.thrift.TBase<echoDouble_result, echoDouble_result._Fields>, java.io.Serializable, Cloneable, Comparable<echoDouble_result>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoDouble_result");
+
+        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.DOUBLE, (short)0);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoDouble_resultStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoDouble_resultTupleSchemeFactory();
+
+        public double success; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            SUCCESS((short)0, "success");
+
+            private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, or null if its not found.
+             */
+            public static _Fields findByThriftId(int fieldId) {
+                switch(fieldId) {
+                    case 0: // SUCCESS
+                        return SUCCESS;
+                    default:
+                        return null;
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, throwing an exception
+             * if it is not found.
+             */
+            public static _Fields findByThriftIdOrThrow(int fieldId) {
+                _Fields fields = findByThriftId(fieldId);
+                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                return fields;
+            }
+
+            /**
+             * Find the _Fields constant that matches name, or null if its not found.
+             */
+            public static _Fields findByName(String name) {
+                return byName.get(name);
+            }
+
+            private final short _thriftId;
+            private final String _fieldName;
+
+            _Fields(short thriftId, String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
+            public short getThriftFieldId() {
+                return _thriftId;
+            }
+
+            public String getFieldName() {
+                return _fieldName;
+            }
+        }
+
+        // isset id assignments
+        private static final int __SUCCESS_ISSET_ID = 0;
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+        static {
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
+                                                                                      new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoDouble_result.class, metaDataMap);
+        }
+
+        public echoDouble_result() {
+        }
+
+        public echoDouble_result(
+                double success)
+        {
+            this();
+            this.success = success;
+            setSuccessIsSet(true);
+        }
+
+        /**
+         * Performs a deep copy on <i>other</i>.
+         */
+        public echoDouble_result(echoDouble_result other) {
+            __isset_bitfield = other.__isset_bitfield;
+            this.success = other.success;
+        }
+
+        public echoDouble_result deepCopy() {
+            return new echoDouble_result(this);
+        }
+
+        @Override
+        public void clear() {
+            setSuccessIsSet(false);
+            this.success = 0.0;
+        }
+
+        public double getSuccess() {
+            return this.success;
+        }
+
+        public echoDouble_result setSuccess(double success) {
+            this.success = success;
+            setSuccessIsSet(true);
+            return this;
+        }
+
+        public void unsetSuccess() {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+        }
+
+        /** Returns true if field success is set (has been assigned a value) and false otherwise */
+        public boolean isSetSuccess() {
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+        }
+
+        public void setSuccessIsSet(boolean value) {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
+        }
+
+        public void setFieldValue(_Fields field, Object value) {
+            switch (field) {
+                case SUCCESS:
+                    if (value == null) {
+                        unsetSuccess();
+                    } else {
+                        setSuccess((Double)value);
+                    }
+                    break;
+
+            }
+        }
+
+        public Object getFieldValue(_Fields field) {
+            switch (field) {
+                case SUCCESS:
+                    return getSuccess();
+
+            }
+            throw new IllegalStateException();
+        }
+
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+        public boolean isSet(_Fields field) {
+            if (field == null) {
+                throw new IllegalArgumentException();
+            }
+
+            switch (field) {
+                case SUCCESS:
+                    return isSetSuccess();
+            }
+            throw new IllegalStateException();
+        }
+
+        @Override
+        public boolean equals(Object that) {
+            if (that == null)
+                return false;
+            if (that instanceof echoDouble_result)
+                return this.equals((echoDouble_result)that);
+            return false;
+        }
+
+        public boolean equals(echoDouble_result that) {
+            if (that == null)
+                return false;
+            if (this == that)
+                return true;
+
+            boolean this_present_success = true;
+            boolean that_present_success = true;
+            if (this_present_success || that_present_success) {
+                if (!(this_present_success && that_present_success))
+                    return false;
+                if (this.success != that.success)
+                    return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + org.apache.thrift.TBaseHelper.hashCode(success);
+
+            return hashCode;
+        }
+
+        @Override
+        public int compareTo(echoDouble_result other) {
+            if (!getClass().equals(other.getClass())) {
+                return getClass().getName().compareTo(other.getClass().getName());
+            }
+
+            int lastComparison = 0;
+
+            lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+            if (isSetSuccess()) {
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+                if (lastComparison != 0) {
+                    return lastComparison;
+                }
+            }
+            return 0;
+        }
+
+        public _Fields fieldForId(int fieldId) {
+            return _Fields.findByThriftId(fieldId);
+        }
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+            scheme(iprot).read(iprot, this);
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+            scheme(oprot).write(oprot, this);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder("echoDouble_result(");
+            boolean first = true;
+
+            sb.append("success:");
+            sb.append(this.success);
+            first = false;
+            sb.append(")");
+            return sb.toString();
+        }
+
+        public void validate() throws org.apache.thrift.TException {
+            // check for required fields
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+            try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoDouble_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoDouble_resultStandardScheme getScheme() {
+                return new echoDouble_resultStandardScheme();
+            }
+        }
+
+        private static class echoDouble_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoDouble_result> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoDouble_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 0: // SUCCESS
+                            if (schemeField.type == org.apache.thrift.protocol.TType.DOUBLE) {
+                                struct.success = iprot.readDouble();
+                                struct.setSuccessIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoDouble_result struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.isSetSuccess()) {
+                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+                    oprot.writeDouble(struct.success);
+                    oprot.writeFieldEnd();
+                }
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoDouble_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoDouble_resultTupleScheme getScheme() {
+                return new echoDouble_resultTupleScheme();
+            }
+        }
+
+        private static class echoDouble_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoDouble_result> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoDouble_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet optionals = new java.util.BitSet();
+                if (struct.isSetSuccess()) {
+                    optionals.set(0);
+                }
+                oprot.writeBitSet(optionals, 1);
+                if (struct.isSetSuccess()) {
+                    oprot.writeDouble(struct.success);
+                }
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoDouble_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet incoming = iprot.readBitSet(1);
+                if (incoming.get(0)) {
+                    struct.success = iprot.readDouble();
+                    struct.setSuccessIsSet(true);
+                }
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoString_args implements org.apache.thrift.TBase<echoString_args, echoString_args._Fields>, java.io.Serializable, Cloneable, Comparable<echoString_args>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoString_args");
+
+        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.STRING, (short)1);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoString_argsStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoString_argsTupleSchemeFactory();
+
+        public String arg; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            ARG((short)1, "arg");
+
+            private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, or null if its not found.
+             */
+            public static _Fields findByThriftId(int fieldId) {
+                switch(fieldId) {
+                    case 1: // ARG
+                        return ARG;
+                    default:
+                        return null;
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, throwing an exception
+             * if it is not found.
+             */
+            public static _Fields findByThriftIdOrThrow(int fieldId) {
+                _Fields fields = findByThriftId(fieldId);
+                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                return fields;
+            }
+
+            /**
+             * Find the _Fields constant that matches name, or null if its not found.
+             */
+            public static _Fields findByName(String name) {
+                return byName.get(name);
+            }
+
+            private final short _thriftId;
+            private final String _fieldName;
+
+            _Fields(short thriftId, String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
+            public short getThriftFieldId() {
+                return _thriftId;
+            }
+
+            public String getFieldName() {
+                return _fieldName;
+            }
+        }
+
+        // isset id assignments
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+        static {
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            tmpMap.put(_Fields.ARG, new org.apache.thrift.meta_data.FieldMetaData("arg", org.apache.thrift.TFieldRequirementType.REQUIRED,
+                                                                                  new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoString_args.class, metaDataMap);
+        }
+
+        public echoString_args() {
+        }
+
+        public echoString_args(
+                String arg)
+        {
+            this();
+            this.arg = arg;
+        }
+
+        /**
+         * Performs a deep copy on <i>other</i>.
+         */
+        public echoString_args(echoString_args other) {
+            if (other.isSetArg()) {
+                this.arg = other.arg;
+            }
+        }
+
+        public echoString_args deepCopy() {
+            return new echoString_args(this);
+        }
+
+        @Override
+        public void clear() {
+            this.arg = null;
+        }
+
+        public String getArg() {
+            return this.arg;
+        }
+
+        public echoString_args setArg(String arg) {
+            this.arg = arg;
+            return this;
+        }
+
+        public void unsetArg() {
+            this.arg = null;
+        }
+
+        /** Returns true if field arg is set (has been assigned a value) and false otherwise */
+        public boolean isSetArg() {
+            return this.arg != null;
+        }
+
+        public void setArgIsSet(boolean value) {
+            if (!value) {
+                this.arg = null;
+            }
+        }
+
+        public void setFieldValue(_Fields field, Object value) {
+            switch (field) {
+                case ARG:
+                    if (value == null) {
+                        unsetArg();
+                    } else {
+                        setArg((String)value);
+                    }
+                    break;
+
+            }
+        }
+
+        public Object getFieldValue(_Fields field) {
+            switch (field) {
+                case ARG:
+                    return getArg();
+
+            }
+            throw new IllegalStateException();
+        }
+
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+        public boolean isSet(_Fields field) {
+            if (field == null) {
+                throw new IllegalArgumentException();
+            }
+
+            switch (field) {
+                case ARG:
+                    return isSetArg();
+            }
+            throw new IllegalStateException();
+        }
+
+        @Override
+        public boolean equals(Object that) {
+            if (that == null)
+                return false;
+            if (that instanceof echoString_args)
+                return this.equals((echoString_args)that);
+            return false;
+        }
+
+        public boolean equals(echoString_args that) {
+            if (that == null)
+                return false;
+            if (this == that)
+                return true;
+
+            boolean this_present_arg = true && this.isSetArg();
+            boolean that_present_arg = true && that.isSetArg();
+            if (this_present_arg || that_present_arg) {
+                if (!(this_present_arg && that_present_arg))
+                    return false;
+                if (!this.arg.equals(that.arg))
+                    return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + ((isSetArg()) ? 131071 : 524287);
+            if (isSetArg())
+                hashCode = hashCode * 8191 + arg.hashCode();
+
+            return hashCode;
+        }
+
+        @Override
+        public int compareTo(echoString_args other) {
+            if (!getClass().equals(other.getClass())) {
+                return getClass().getName().compareTo(other.getClass().getName());
+            }
+
+            int lastComparison = 0;
+
+            lastComparison = Boolean.valueOf(isSetArg()).compareTo(other.isSetArg());
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+            if (isSetArg()) {
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, other.arg);
+                if (lastComparison != 0) {
+                    return lastComparison;
+                }
+            }
+            return 0;
+        }
+
+        public _Fields fieldForId(int fieldId) {
+            return _Fields.findByThriftId(fieldId);
+        }
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+            scheme(iprot).read(iprot, this);
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+            scheme(oprot).write(oprot, this);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder("echoString_args(");
+            boolean first = true;
+
+            sb.append("arg:");
+            if (this.arg == null) {
+                sb.append("null");
+            } else {
+                sb.append(this.arg);
+            }
+            first = false;
+            sb.append(")");
+            return sb.toString();
+        }
+
+        public void validate() throws org.apache.thrift.TException {
+            // check for required fields
+            if (arg == null) {
+                throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not present! Struct: " + toString());
+            }
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+            try {
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoString_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoString_argsStandardScheme getScheme() {
+                return new echoString_argsStandardScheme();
+            }
+        }
+
+        private static class echoString_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoString_args> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoString_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 1: // ARG
+                            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                                struct.arg = iprot.readString();
+                                struct.setArgIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoString_args struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.arg != null) {
+                    oprot.writeFieldBegin(ARG_FIELD_DESC);
+                    oprot.writeString(struct.arg);
+                    oprot.writeFieldEnd();
+                }
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoString_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoString_argsTupleScheme getScheme() {
+                return new echoString_argsTupleScheme();
+            }
+        }
+
+        private static class echoString_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoString_args> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoString_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                oprot.writeString(struct.arg);
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoString_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                struct.arg = iprot.readString();
+                struct.setArgIsSet(true);
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoString_result implements org.apache.thrift.TBase<echoString_result, echoString_result._Fields>, java.io.Serializable, Cloneable, Comparable<echoString_result>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoString_result");
+
+        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.STRING, (short)0);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoString_resultStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoString_resultTupleSchemeFactory();
+
+        public String success; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            SUCCESS((short)0, "success");
+
+            private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, or null if its not found.
+             */
+            public static _Fields findByThriftId(int fieldId) {
+                switch(fieldId) {
+                    case 0: // SUCCESS
+                        return SUCCESS;
+                    default:
+                        return null;
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, throwing an exception
+             * if it is not found.
+             */
+            public static _Fields findByThriftIdOrThrow(int fieldId) {
+                _Fields fields = findByThriftId(fieldId);
+                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                return fields;
+            }
+
+            /**
+             * Find the _Fields constant that matches name, or null if its not found.
+             */
+            public static _Fields findByName(String name) {
+                return byName.get(name);
+            }
+
+            private final short _thriftId;
+            private final String _fieldName;
+
+            _Fields(short thriftId, String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
+            public short getThriftFieldId() {
+                return _thriftId;
+            }
+
+            public String getFieldName() {
+                return _fieldName;
+            }
+        }
+
+        // isset id assignments
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+        static {
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
+                                                                                      new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoString_result.class, metaDataMap);
+        }
+
+        public echoString_result() {
+        }
+
+        public echoString_result(
+                String success)
+        {
+            this();
+            this.success = success;
+        }
+
+        /**
+         * Performs a deep copy on <i>other</i>.
+         */
+        public echoString_result(echoString_result other) {
+            if (other.isSetSuccess()) {
+                this.success = other.success;
+            }
+        }
+
+        public echoString_result deepCopy() {
+            return new echoString_result(this);
+        }
+
+        @Override
+        public void clear() {
+            this.success = null;
+        }
+
+        public String getSuccess() {
+            return this.success;
+        }
+
+        public echoString_result setSuccess(String success) {
+            this.success = success;
+            return this;
+        }
+
+        public void unsetSuccess() {
+            this.success = null;
+        }
+
+        /** Returns true if field success is set (has been assigned a value) and false otherwise */
+        public boolean isSetSuccess() {
+            return this.success != null;
+        }
+
+        public void setSuccessIsSet(boolean value) {
+            if (!value) {
+                this.success = null;
+            }
+        }
+
+        public void setFieldValue(_Fields field, Object value) {
+            switch (field) {
+                case SUCCESS:
+                    if (value == null) {
+                        unsetSuccess();
+                    } else {
+                        setSuccess((String)value);
+                    }
+                    break;
+
+            }
+        }
+
+        public Object getFieldValue(_Fields field) {
+            switch (field) {
+                case SUCCESS:
+                    return getSuccess();
+
+            }
+            throw new IllegalStateException();
+        }
+
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+        public boolean isSet(_Fields field) {
+            if (field == null) {
+                throw new IllegalArgumentException();
+            }
+
+            switch (field) {
+                case SUCCESS:
+                    return isSetSuccess();
+            }
+            throw new IllegalStateException();
+        }
+
+        @Override
+        public boolean equals(Object that) {
+            if (that == null)
+                return false;
+            if (that instanceof echoString_result)
+                return this.equals((echoString_result)that);
+            return false;
+        }
+
+        public boolean equals(echoString_result that) {
+            if (that == null)
+                return false;
+            if (this == that)
+                return true;
+
+            boolean this_present_success = true && this.isSetSuccess();
+            boolean that_present_success = true && that.isSetSuccess();
+            if (this_present_success || that_present_success) {
+                if (!(this_present_success && that_present_success))
+                    return false;
+                if (!this.success.equals(that.success))
+                    return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + ((isSetSuccess()) ? 131071 : 524287);
+            if (isSetSuccess())
+                hashCode = hashCode * 8191 + success.hashCode();
+
+            return hashCode;
+        }
+
+        @Override
+        public int compareTo(echoString_result other) {
+            if (!getClass().equals(other.getClass())) {
+                return getClass().getName().compareTo(other.getClass().getName());
+            }
+
+            int lastComparison = 0;
+
+            lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+            if (isSetSuccess()) {
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+                if (lastComparison != 0) {
+                    return lastComparison;
+                }
+            }
+            return 0;
+        }
+
+        public _Fields fieldForId(int fieldId) {
+            return _Fields.findByThriftId(fieldId);
+        }
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+            scheme(iprot).read(iprot, this);
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+            scheme(oprot).write(oprot, this);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder("echoString_result(");
+            boolean first = true;
+
+            sb.append("success:");
+            if (this.success == null) {
+                sb.append("null");
+            } else {
+                sb.append(this.success);
+            }
+            first = false;
+            sb.append(")");
+            return sb.toString();
+        }
+
+        public void validate() throws org.apache.thrift.TException {
+            // check for required fields
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+            try {
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoString_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoString_resultStandardScheme getScheme() {
+                return new echoString_resultStandardScheme();
+            }
+        }
+
+        private static class echoString_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoString_result> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoString_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 0: // SUCCESS
+                            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                                struct.success = iprot.readString();
+                                struct.setSuccessIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoString_result struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.success != null) {
+                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+                    oprot.writeString(struct.success);
+                    oprot.writeFieldEnd();
+                }
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoString_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoString_resultTupleScheme getScheme() {
+                return new echoString_resultTupleScheme();
+            }
+        }
+
+        private static class echoString_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoString_result> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoString_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet optionals = new java.util.BitSet();
+                if (struct.isSetSuccess()) {
+                    optionals.set(0);
+                }
+                oprot.writeBitSet(optionals, 1);
+                if (struct.isSetSuccess()) {
+                    oprot.writeString(struct.success);
+                }
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoString_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet incoming = iprot.readBitSet(1);
+                if (incoming.get(0)) {
+                    struct.success = iprot.readString();
+                    struct.setSuccessIsSet(true);
+                }
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+}
diff --git a/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-thrift-demo-consumer.xml b/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-thrift-demo-consumer.xml
new file mode 100644
index 0000000000..c49e88ad58
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-thrift-demo-consumer.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
+       xmlns="http://www.springframework.org/schema/beans"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+       http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
+
+    <!-- consumer's application name, used for tracing dependency relationship (not a matching criterion),
+    don't set it same as provider -->
+    <dubbo:application name="thrift-demo-consumer"/>
+    <dubbo:protocol name="thrift"/>
+    <!-- use multicast registry center to discover service -->
+    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
+
+    <!-- generate proxy for the remote service, then demoService can be used in the same way as the
+    local regular interface -->
+    <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.ThriftDemoService$Iface" timeout="1000000"/>
+
+</beans>
\ No newline at end of file
diff --git a/dubbo-demo/dubbo-demo-provider/pom.xml b/dubbo-demo/dubbo-demo-provider/pom.xml
index 0409cf9160..542e57132a 100644
--- a/dubbo-demo/dubbo-demo-provider/pom.xml
+++ b/dubbo-demo/dubbo-demo-provider/pom.xml
@@ -52,6 +52,10 @@
             <groupId>com.alibaba</groupId>
             <artifactId>dubbo-rpc-dubbo</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>dubbo-rpc-thrift</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>dubbo-remoting-netty</artifactId>
@@ -61,4 +65,4 @@
             <artifactId>dubbo-serialization-hessian2</artifactId>
         </dependency>
     </dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/dubbo-demo/dubbo-demo-provider/src/main/java/com/alibaba/dubbo/demo/provider/ThriftDemoImpl.java b/dubbo-demo/dubbo-demo-provider/src/main/java/com/alibaba/dubbo/demo/provider/ThriftDemoImpl.java
new file mode 100644
index 0000000000..94d31bd2f8
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-provider/src/main/java/com/alibaba/dubbo/demo/provider/ThriftDemoImpl.java
@@ -0,0 +1,53 @@
+package com.alibaba.dubbo.demo.provider;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import com.alibaba.dubbo.demo.ThriftDemoService;
+
+
+public class ThriftDemoImpl implements ThriftDemoService.Iface {
+
+    public boolean echoBool(boolean arg) {
+        return arg;
+    }
+
+    public byte echoByte(byte arg) {
+        return arg;
+    }
+
+    public short echoI16(short arg) {
+        return arg;
+    }
+
+    public int echoI32(int arg) {
+        return arg;
+    }
+
+    public long echoI64(long arg) {
+        return arg;
+    }
+
+    public double echoDouble(double arg) {
+        return arg;
+    }
+
+    public String echoString(String arg) {
+        return arg;
+    }
+
+}
diff --git a/dubbo-demo/dubbo-demo-provider/src/main/java/com/alibaba/dubbo/demo/provider/ThriftProvider.java b/dubbo-demo/dubbo-demo-provider/src/main/java/com/alibaba/dubbo/demo/provider/ThriftProvider.java
new file mode 100644
index 0000000000..1b5af16498
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-provider/src/main/java/com/alibaba/dubbo/demo/provider/ThriftProvider.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.alibaba.dubbo.demo.provider;
+
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class ThriftProvider {
+
+    public static void main(String[] args) throws Exception {
+        //Prevent to get IPV6 address,this way only work in debug mode
+        //But you can pass use -Djava.net.preferIPv4Stack=true,then it work well whether in debug mode or not
+        System.setProperty("java.net.preferIPv4Stack", "true");
+        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-thrift-demo-provider.xml"});
+        context.start();
+
+        System.in.read(); // press any key to exit
+    }
+
+}
diff --git a/dubbo-demo/dubbo-demo-provider/src/main/resources/META-INF/spring/dubbo-thrift-demo-provider.xml b/dubbo-demo/dubbo-demo-provider/src/main/resources/META-INF/spring/dubbo-thrift-demo-provider.xml
new file mode 100644
index 0000000000..b4a01b943c
--- /dev/null
+++ b/dubbo-demo/dubbo-demo-provider/src/main/resources/META-INF/spring/dubbo-thrift-demo-provider.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
+       xmlns="http://www.springframework.org/schema/beans"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+       http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
+
+    <!-- provider's application name, used for tracing dependency relationship -->
+    <dubbo:application name="thrift-demo-provider"/>
+
+    <!-- use multicast registry center to export service -->
+    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
+
+    <!-- use dubbo protocol to export service on port 40880 -->
+    <dubbo:protocol name="thrift" port="40880"/>
+
+    <!-- service implementation, as same as regular local bean -->
+    <bean id="thriftDemoService" class="com.alibaba.dubbo.demo.provider.ThriftDemoImpl"/>
+
+    <!-- declare the service interface to be exported -->
+    <dubbo:service protocol="thrift" nativethrift="true" interface="com.alibaba.dubbo.demo.ThriftDemoService$Iface" ref="thriftDemoService" timeout="1000000"/>
+
+</beans>
\ No newline at end of file
diff --git a/dubbo-rpc/dubbo-rpc-thrift/pom.xml b/dubbo-rpc/dubbo-rpc-thrift/pom.xml
index 06b544fe59..c437280c0e 100644
--- a/dubbo-rpc/dubbo-rpc-thrift/pom.xml
+++ b/dubbo-rpc/dubbo-rpc-thrift/pom.xml
@@ -54,6 +54,10 @@
             <groupId>org.apache.thrift</groupId>
             <artifactId>libthrift</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-context</artifactId>
@@ -70,5 +74,12 @@
             <version>${project.parent.version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>dubbo-registry-zookeeper</artifactId>
+            <version>${project.parent.version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
+
 </project>
\ No newline at end of file
diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/main/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftCodec.java b/dubbo-rpc/dubbo-rpc-thrift/src/main/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftCodec.java
index 91a61a139d..66432993f4 100644
--- a/dubbo-rpc/dubbo-rpc-thrift/src/main/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftCodec.java
+++ b/dubbo-rpc/dubbo-rpc-thrift/src/main/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftCodec.java
@@ -31,7 +31,7 @@
 import com.alibaba.dubbo.rpc.RpcResult;
 import com.alibaba.dubbo.rpc.protocol.thrift.io.RandomAccessByteArrayOutputStream;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.thrift.TApplicationException;
 import org.apache.thrift.TBase;
 import org.apache.thrift.TException;
@@ -55,7 +55,7 @@
 
 /**
  * Thrift framed protocol codec.
- *
+ * <p>
  * <pre>
  * |<-                                  message header                                  ->|<- message body ->|
  * +----------------+----------------------+------------------+---------------------------+------------------+
@@ -63,12 +63,12 @@
  * +----------------+----------------------+------------------+---------------------------+------------------+
  * |<-                                               message size                                          ->|
  * </pre>
- *
+ * <p>
  * <p>
  * <b>header fields in version 1</b>
  * <ol>
- *     <li>string - service name</li>
- *     <li>long   - dubbo request id</li>
+ * <li>string - service name</li>
+ * <li>long   - dubbo request id</li>
  * </ol>
  * </p>
  */
@@ -78,6 +78,7 @@
     public static final int MESSAGE_HEADER_LENGTH_INDEX = 6;
     public static final int MESSAGE_SHORTEST_LENGTH = 10;
     public static final String NAME = "thrift";
+    public static final String NATIVE_THRIFT_TYPE = "nativethrift";
     public static final String PARAMETER_CLASS_NAME_GENERATOR = "class.name.generator";
     public static final byte VERSION = (byte) 1;
     public static final short MAGIC = (short) 0xdabc;
@@ -105,12 +106,22 @@ public void encode(Channel channel, ChannelBuffer buffer, Object message)
         } else if (message instanceof Response) {
             encodeResponse(channel, buffer, (Response) message);
         } else {
-            throw new UnsupportedOperationException("Thrift codec only support encode " 
+            throw new UnsupportedOperationException("Thrift codec only support encode "
                     + Request.class.getName() + " and " + Response.class.getName());
         }
 
     }
 
+    /**
+     * judge if native thrift or not
+     *
+     * @param channel
+     * @return
+     */
+    private boolean isNativeThrift(Channel channel) {
+        return Boolean.valueOf(channel.getUrl().getParameter(NATIVE_THRIFT_TYPE));
+    }
+
     @Override
     public Object decode(Channel channel, ChannelBuffer buffer) throws IOException {
 
@@ -125,36 +136,39 @@ public Object decode(Channel channel, ChannelBuffer buffer) throws IOException {
             TIOStreamTransport transport = new TIOStreamTransport(new ChannelBufferInputStream(buffer));
 
             TBinaryProtocol protocol = new TBinaryProtocol(transport);
+            //the native thrift datagram have no these header info
+            boolean isNotNativeThrift = !isNativeThrift(channel);
+            if (isNotNativeThrift) {
+                short magic;
+                int messageLength;
 
-            short magic;
-            int messageLength;
-
-            try {
-//                protocol.readI32(); // skip the first message length
-                byte[] bytes = new byte[4];
-                transport.read(bytes, 0, 4);
-                magic = protocol.readI16();
-                messageLength = protocol.readI32();
-
-            } catch (TException e) {
-                throw new IOException(e.getMessage(), e);
-            }
+                try {
+                    //                protocol.readI32(); // skip the first message length
+                    byte[] bytes = new byte[4];
+                    transport.read(bytes, 0, 4);
+                    magic = protocol.readI16();
+                    messageLength = protocol.readI32();
+
+                } catch (TException e) {
+                    throw new IOException(e.getMessage(), e);
+                }
 
-            if (MAGIC != magic) {
-                throw new IOException("Unknown magic code " + magic);
-            }
+                if (MAGIC != magic) {
+                    throw new IOException("Unknown magic code " + magic);
+                }
 
-            if (available < messageLength) {
-                return DecodeResult.NEED_MORE_INPUT;
+                if (available < messageLength) {
+                    return DecodeResult.NEED_MORE_INPUT;
+                }
             }
-
-            return decode(protocol);
+            String serviceInterface = channel.getUrl().getServiceInterface();
+            return decode(protocol, isNotNativeThrift, serviceInterface);
 
         }
 
     }
 
-    private Object decode(TProtocol protocol)
+    private Object decode(TProtocol protocol, Boolean isNativeThrift, String serviceInterface)
             throws IOException {
 
         // version
@@ -164,11 +178,17 @@ private Object decode(TProtocol protocol)
         TMessage message;
 
         try {
-            protocol.readI16();
-            protocol.readByte();
-            serviceName = protocol.readString();
-            id = protocol.readI64();
-            message = protocol.readMessageBegin();
+            if (isNativeThrift) {
+                serviceName = serviceInterface;
+                message = protocol.readMessageBegin();
+                id = message.seqid;//id error will cause client error
+            } else {
+                protocol.readI16();
+                protocol.readByte();
+                serviceName = protocol.readString();
+                id = protocol.readI64();
+                message = protocol.readMessageBegin();
+            }
         } catch (TException e) {
             throw new IOException(e.getMessage(), e);
         }
@@ -272,7 +292,7 @@ private Object decode(TProtocol protocol)
             TApplicationException exception;
 
             try {
-                exception = TApplicationException.read(protocol);
+                exception = TApplicationException.readFrom(protocol);
                 protocol.readMessageEnd();
             } catch (TException e) {
                 throw new IOException(e.getMessage(), e);
@@ -296,7 +316,7 @@ private Object decode(TProtocol protocol)
                     .getExtension(ThriftClassNameGenerator.NAME).generateResultClassName(serviceName, message.name);
 
             if (StringUtils.isEmpty(resultClassName)) {
-                throw new IllegalArgumentException("Could not infer service result class name from service name " 
+                throw new IllegalArgumentException("Could not infer service result class name from service name "
                         + serviceName + ", the service name you specified may not generated by thrift idl compiler");
             }
 
@@ -398,7 +418,7 @@ private void encodeRequest(Channel channel, ChannelBuffer buffer, Request reques
         String serviceName = inv.getAttachment(Constants.INTERFACE_KEY);
 
         if (StringUtils.isEmpty(serviceName)) {
-            throw new IllegalArgumentException("Could not find service name in attachment with key " 
+            throw new IllegalArgumentException("Could not find service name in attachment with key "
                     + Constants.INTERFACE_KEY);
         }
 
@@ -640,21 +660,23 @@ private void encodeResponse(Channel channel, ChannelBuffer buffer, Response resp
 
         byte[] bytes = new byte[4];
         try {
-            // magic
-            protocol.writeI16(MAGIC);
-            // message length
-            protocol.writeI32(Integer.MAX_VALUE);
-            // message header length
-            protocol.writeI16(Short.MAX_VALUE);
-            // version
-            protocol.writeByte(VERSION);
-            // service name
-            protocol.writeString(rd.serviceName);
-            // id
-            protocol.writeI64(response.getId());
-            protocol.getTransport().flush();
+            //native thrift ignore
+            if (!isNativeThrift(channel)) {
+                // magic
+                protocol.writeI16(MAGIC);
+                // message length
+                protocol.writeI32(Integer.MAX_VALUE);
+                // message header length
+                protocol.writeI16(Short.MAX_VALUE);
+                // version
+                protocol.writeByte(VERSION);
+                // service name
+                protocol.writeString(rd.serviceName);
+                // id
+                protocol.writeI64(response.getId());
+                protocol.getTransport().flush();
+            }
             headerLength = bos.size();
-
             // message
             protocol.writeMessageBegin(message);
             switch (message.type) {
@@ -668,22 +690,26 @@ private void encodeResponse(Channel channel, ChannelBuffer buffer, Response resp
             protocol.writeMessageEnd();
             protocol.getTransport().flush();
             int oldIndex = messageLength = bos.size();
-
             try {
-                TFramedTransport.encodeFrameSize(messageLength, bytes);
-                bos.setWriteIndex(MESSAGE_LENGTH_INDEX);
-                protocol.writeI32(messageLength);
-                bos.setWriteIndex(MESSAGE_HEADER_LENGTH_INDEX);
-                protocol.writeI16((short) (0xffff & headerLength));
+                //native thrift ignore
+                if (!isNativeThrift(channel)) {
+                    TFramedTransport.encodeFrameSize(messageLength, bytes);
+                    bos.setWriteIndex(MESSAGE_LENGTH_INDEX);
+                    protocol.writeI32(messageLength);
+                    bos.setWriteIndex(MESSAGE_HEADER_LENGTH_INDEX);
+                    protocol.writeI16((short) (0xffff & headerLength));
+                }
             } finally {
                 bos.setWriteIndex(oldIndex);
             }
-
         } catch (TException e) {
             throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);
         }
 
-        buffer.writeBytes(bytes);
+        //native thrift ignore
+        if (!isNativeThrift(channel)) {
+            buffer.writeBytes(bytes);
+        }
         buffer.writeBytes(bos.toByteArray());
 
     }
diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/$__ClassNameTestDubboStub.java b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/$__ClassNameTestDubboStub.java
index a60c7b60a1..c7f92d7b5e 100644
--- a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/$__ClassNameTestDubboStub.java
+++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/$__ClassNameTestDubboStub.java
@@ -60,11 +60,16 @@ public echo() {
                 super("echo");
             }
 
-            protected echo_args getEmptyArgsInstance() {
+            public echo_args getEmptyArgsInstance() {
                 return new echo_args();
             }
 
-            protected echo_result getResult(I iface, echo_args args) throws org.apache.thrift.TException {
+            @Override
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public echo_result getResult(I iface, echo_args args) throws org.apache.thrift.TException {
                 echo_result result = new echo_result();
                 result.success = iface.echo(args.arg);
                 return result;
diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/ClassNameTestThrift.java b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/ClassNameTestThrift.java
index 51f04a20b5..2175883703 100644
--- a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/ClassNameTestThrift.java
+++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/ClassNameTestThrift.java
@@ -146,11 +146,16 @@ public echo() {
                 super("echo");
             }
 
-            protected echo_args getEmptyArgsInstance() {
+            public echo_args getEmptyArgsInstance() {
                 return new echo_args();
             }
 
-            protected echo_result getResult(I iface, echo_args args) throws org.apache.thrift.TException {
+            @Override
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public echo_result getResult(I iface, echo_args args) throws org.apache.thrift.TException {
                 echo_result result = new echo_result();
                 result.success = iface.echo(args.arg);
                 return result;
diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/DemoImpl.java b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/examples/DemoImpl.java
similarity index 96%
rename from dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/DemoImpl.java
rename to dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/examples/DemoImpl.java
index 34bacfd991..f9de1d14c3 100644
--- a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/DemoImpl.java
+++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/examples/DemoImpl.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.alibaba.dubbo.rpc.protocol.thrift;
+package com.alibaba.dubbo.rpc.examples;
 
 public class DemoImpl {
 
diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/examples/DubboDemoConsumer.java b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/examples/DubboThriftDemoConsumer.java
similarity index 94%
rename from dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/examples/DubboDemoConsumer.java
rename to dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/examples/DubboThriftDemoConsumer.java
index 1f6545eb0a..803e274c1e 100644
--- a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/examples/DubboDemoConsumer.java
+++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/examples/DubboThriftDemoConsumer.java
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.alibaba.dubbo.rpc.protocol.thrift.examples;
+package com.alibaba.dubbo.rpc.examples;
 
 import com.alibaba.dubbo.rpc.gen.thrift.Demo;
 
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-public class DubboDemoConsumer {
+public class DubboThriftDemoConsumer {
 
     public static void main(String[] args) throws Exception {
         ClassPathXmlApplicationContext context =
diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/examples/DubboDemoProvider.java b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/examples/DubboThriftDemoProvider.java
similarity index 66%
rename from dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/examples/DubboDemoProvider.java
rename to dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/examples/DubboThriftDemoProvider.java
index 6671d1027c..31b3503264 100644
--- a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/examples/DubboDemoProvider.java
+++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/examples/DubboThriftDemoProvider.java
@@ -14,18 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.alibaba.dubbo.rpc.protocol.thrift.examples;
+package com.alibaba.dubbo.rpc.examples;
 
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-public class DubboDemoProvider {
+public class DubboThriftDemoProvider {
 
     public static void main(String[] args) throws Exception {
-        ClassPathXmlApplicationContext context =
-                new ClassPathXmlApplicationContext("dubbo-demo-provider.xml");
+        //Prevent to get IPV6 address,this way only work in debug mode
+        //But you can pass use -Djava.net.preferIPv4Stack=true,then it work well whether in debug mode or not
+        System.setProperty("java.net.preferIPv4Stack", "true");
+        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo-demo-provider.xml"});
         context.start();
-        System.out.println("context started");
-        System.in.read();
+
+        System.in.read(); // press any key to exit
     }
 
 }
diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftDemoImpl.java b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/examples/ThriftDemoImpl.java
similarity index 95%
rename from dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftDemoImpl.java
rename to dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/examples/ThriftDemoImpl.java
index 4a8b4fea43..bcb977c846 100644
--- a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftDemoImpl.java
+++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/examples/ThriftDemoImpl.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.alibaba.dubbo.rpc.protocol.thrift;
+package com.alibaba.dubbo.rpc.examples;
 
 import com.alibaba.dubbo.rpc.gen.thrift.Demo;
 
diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/gen/dubbo/$__DemoStub.java b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/gen/dubbo/$__DemoStub.java
index 0b49afb7ee..bd43a959b0 100644
--- a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/gen/dubbo/$__DemoStub.java
+++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/gen/dubbo/$__DemoStub.java
@@ -80,11 +80,16 @@ public echoBool() {
                 super("echoBool");
             }
 
-            protected echoBool_args getEmptyArgsInstance() {
+            public echoBool_args getEmptyArgsInstance() {
                 return new echoBool_args();
             }
 
-            protected echoBool_result getResult(I iface, echoBool_args args) throws org.apache.thrift.TException {
+            @Override
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public echoBool_result getResult(I iface, echoBool_args args) throws org.apache.thrift.TException {
                 echoBool_result result = new echoBool_result();
                 result.success = iface.echoBool(args.arg);
                 result.setSuccessIsSet(true);
@@ -97,11 +102,16 @@ public echoByte() {
                 super("echoByte");
             }
 
-            protected echoByte_args getEmptyArgsInstance() {
+            public echoByte_args getEmptyArgsInstance() {
                 return new echoByte_args();
             }
 
-            protected echoByte_result getResult(I iface, echoByte_args args) throws org.apache.thrift.TException {
+            @Override
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public echoByte_result getResult(I iface, echoByte_args args) throws org.apache.thrift.TException {
                 echoByte_result result = new echoByte_result();
                 result.success = iface.echoByte(args.arg);
                 result.setSuccessIsSet(true);
@@ -114,11 +124,16 @@ public echoI16() {
                 super("echoI16");
             }
 
-            protected echoI16_args getEmptyArgsInstance() {
+            public echoI16_args getEmptyArgsInstance() {
                 return new echoI16_args();
             }
 
-            protected echoI16_result getResult(I iface, echoI16_args args) throws org.apache.thrift.TException {
+            @Override
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public echoI16_result getResult(I iface, echoI16_args args) throws org.apache.thrift.TException {
                 echoI16_result result = new echoI16_result();
                 result.success = iface.echoI16(args.arg);
                 result.setSuccessIsSet(true);
@@ -131,11 +146,16 @@ public echoI32() {
                 super("echoI32");
             }
 
-            protected echoI32_args getEmptyArgsInstance() {
+            public echoI32_args getEmptyArgsInstance() {
                 return new echoI32_args();
             }
 
-            protected echoI32_result getResult(I iface, echoI32_args args) throws org.apache.thrift.TException {
+            @Override
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public echoI32_result getResult(I iface, echoI32_args args) throws org.apache.thrift.TException {
                 echoI32_result result = new echoI32_result();
                 result.success = iface.echoI32(args.arg);
                 result.setSuccessIsSet(true);
@@ -148,11 +168,16 @@ public echoI64() {
                 super("echoI64");
             }
 
-            protected echoI64_args getEmptyArgsInstance() {
+            public echoI64_args getEmptyArgsInstance() {
                 return new echoI64_args();
             }
 
-            protected echoI64_result getResult(I iface, echoI64_args args) throws org.apache.thrift.TException {
+            @Override
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public echoI64_result getResult(I iface, echoI64_args args) throws org.apache.thrift.TException {
                 echoI64_result result = new echoI64_result();
                 result.success = iface.echoI64(args.arg);
                 result.setSuccessIsSet(true);
@@ -165,11 +190,16 @@ public echoDouble() {
                 super("echoDouble");
             }
 
-            protected echoDouble_args getEmptyArgsInstance() {
+            public echoDouble_args getEmptyArgsInstance() {
                 return new echoDouble_args();
             }
 
-            protected echoDouble_result getResult(I iface, echoDouble_args args) throws org.apache.thrift.TException {
+            @Override
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public echoDouble_result getResult(I iface, echoDouble_args args) throws org.apache.thrift.TException {
                 echoDouble_result result = new echoDouble_result();
                 result.success = iface.echoDouble(args.arg);
                 result.setSuccessIsSet(true);
@@ -182,11 +212,16 @@ public echoString() {
                 super("echoString");
             }
 
-            protected echoString_args getEmptyArgsInstance() {
+            public echoString_args getEmptyArgsInstance() {
                 return new echoString_args();
             }
 
-            protected echoString_result getResult(I iface, echoString_args args) throws org.apache.thrift.TException {
+            @Override
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public echoString_result getResult(I iface, echoString_args args) throws org.apache.thrift.TException {
                 echoString_result result = new echoString_result();
                 result.success = iface.echoString(args.arg);
                 return result;
diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/gen/thrift/Demo.java b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/gen/thrift/Demo.java
index b14d94c680..b396b7d240 100644
--- a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/gen/thrift/Demo.java
+++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/gen/thrift/Demo.java
@@ -1,20 +1,13 @@
 /**
- * Autogenerated by Thrift Compiler (0.7.0)
- * <p>
+ * Autogenerated by Thrift Compiler (0.11.0)
+ *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
  */
 package com.alibaba.dubbo.rpc.gen.thrift;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.BitSet;
-import java.util.Collections;
-import java.util.EnumMap;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.Map;
-
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.11.0)", date = "2018-01-19")
 public class Demo {
 
     public interface Iface {
@@ -31,30 +24,41 @@
 
         public double echoDouble(double arg) throws org.apache.thrift.TException;
 
-        public String echoString(String arg) throws org.apache.thrift.TException;
+        public java.lang.String echoString(java.lang.String arg) throws org.apache.thrift.TException;
 
     }
 
     public interface AsyncIface {
 
-        public void echoBool(boolean arg, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.echoBool_call> resultHandler) throws org.apache.thrift.TException;
+        public void echoBool(boolean arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException;
 
-        public void echoByte(byte arg, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.echoByte_call> resultHandler) throws org.apache.thrift.TException;
+        public void echoByte(byte arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Byte> resultHandler) throws org.apache.thrift.TException;
 
-        public void echoI16(short arg, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.echoI16_call> resultHandler) throws org.apache.thrift.TException;
+        public void echoI16(short arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Short> resultHandler) throws org.apache.thrift.TException;
 
-        public void echoI32(int arg, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.echoI32_call> resultHandler) throws org.apache.thrift.TException;
+        public void echoI32(int arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Integer> resultHandler) throws org.apache.thrift.TException;
 
-        public void echoI64(long arg, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.echoI64_call> resultHandler) throws org.apache.thrift.TException;
+        public void echoI64(long arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Long> resultHandler) throws org.apache.thrift.TException;
 
-        public void echoDouble(double arg, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.echoDouble_call> resultHandler) throws org.apache.thrift.TException;
+        public void echoDouble(double arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Double> resultHandler) throws org.apache.thrift.TException;
 
-        public void echoString(String arg, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.echoString_call> resultHandler) throws org.apache.thrift.TException;
+        public void echoString(java.lang.String arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException;
 
     }
 
     public static class Client extends org.apache.thrift.TServiceClient implements Iface {
-        public Client(org.apache.thrift.protocol.TProtocol prot) {
+        public static class Factory implements org.apache.thrift.TServiceClientFactory<Client> {
+            public Factory() {}
+            public Client getClient(org.apache.thrift.protocol.TProtocol prot) {
+                return new Client(prot);
+            }
+            public Client getClient(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) {
+                return new Client(iprot, oprot);
+            }
+        }
+
+        public Client(org.apache.thrift.protocol.TProtocol prot)
+        {
             super(prot, prot);
         }
 
@@ -62,18 +66,21 @@ public Client(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.prot
             super(iprot, oprot);
         }
 
-        public boolean echoBool(boolean arg) throws org.apache.thrift.TException {
+        public boolean echoBool(boolean arg) throws org.apache.thrift.TException
+        {
             send_echoBool(arg);
             return recv_echoBool();
         }
 
-        public void send_echoBool(boolean arg) throws org.apache.thrift.TException {
+        public void send_echoBool(boolean arg) throws org.apache.thrift.TException
+        {
             echoBool_args args = new echoBool_args();
             args.setArg(arg);
             sendBase("echoBool", args);
         }
 
-        public boolean recv_echoBool() throws org.apache.thrift.TException {
+        public boolean recv_echoBool() throws org.apache.thrift.TException
+        {
             echoBool_result result = new echoBool_result();
             receiveBase(result, "echoBool");
             if (result.isSetSuccess()) {
@@ -82,18 +89,21 @@ public boolean recv_echoBool() throws org.apache.thrift.TException {
             throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echoBool failed: unknown result");
         }
 
-        public byte echoByte(byte arg) throws org.apache.thrift.TException {
+        public byte echoByte(byte arg) throws org.apache.thrift.TException
+        {
             send_echoByte(arg);
             return recv_echoByte();
         }
 
-        public void send_echoByte(byte arg) throws org.apache.thrift.TException {
+        public void send_echoByte(byte arg) throws org.apache.thrift.TException
+        {
             echoByte_args args = new echoByte_args();
             args.setArg(arg);
             sendBase("echoByte", args);
         }
 
-        public byte recv_echoByte() throws org.apache.thrift.TException {
+        public byte recv_echoByte() throws org.apache.thrift.TException
+        {
             echoByte_result result = new echoByte_result();
             receiveBase(result, "echoByte");
             if (result.isSetSuccess()) {
@@ -102,18 +112,21 @@ public byte recv_echoByte() throws org.apache.thrift.TException {
             throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echoByte failed: unknown result");
         }
 
-        public short echoI16(short arg) throws org.apache.thrift.TException {
+        public short echoI16(short arg) throws org.apache.thrift.TException
+        {
             send_echoI16(arg);
             return recv_echoI16();
         }
 
-        public void send_echoI16(short arg) throws org.apache.thrift.TException {
+        public void send_echoI16(short arg) throws org.apache.thrift.TException
+        {
             echoI16_args args = new echoI16_args();
             args.setArg(arg);
             sendBase("echoI16", args);
         }
 
-        public short recv_echoI16() throws org.apache.thrift.TException {
+        public short recv_echoI16() throws org.apache.thrift.TException
+        {
             echoI16_result result = new echoI16_result();
             receiveBase(result, "echoI16");
             if (result.isSetSuccess()) {
@@ -122,18 +135,21 @@ public short recv_echoI16() throws org.apache.thrift.TException {
             throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echoI16 failed: unknown result");
         }
 
-        public int echoI32(int arg) throws org.apache.thrift.TException {
+        public int echoI32(int arg) throws org.apache.thrift.TException
+        {
             send_echoI32(arg);
             return recv_echoI32();
         }
 
-        public void send_echoI32(int arg) throws org.apache.thrift.TException {
+        public void send_echoI32(int arg) throws org.apache.thrift.TException
+        {
             echoI32_args args = new echoI32_args();
             args.setArg(arg);
             sendBase("echoI32", args);
         }
 
-        public int recv_echoI32() throws org.apache.thrift.TException {
+        public int recv_echoI32() throws org.apache.thrift.TException
+        {
             echoI32_result result = new echoI32_result();
             receiveBase(result, "echoI32");
             if (result.isSetSuccess()) {
@@ -142,18 +158,21 @@ public int recv_echoI32() throws org.apache.thrift.TException {
             throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echoI32 failed: unknown result");
         }
 
-        public long echoI64(long arg) throws org.apache.thrift.TException {
+        public long echoI64(long arg) throws org.apache.thrift.TException
+        {
             send_echoI64(arg);
             return recv_echoI64();
         }
 
-        public void send_echoI64(long arg) throws org.apache.thrift.TException {
+        public void send_echoI64(long arg) throws org.apache.thrift.TException
+        {
             echoI64_args args = new echoI64_args();
             args.setArg(arg);
             sendBase("echoI64", args);
         }
 
-        public long recv_echoI64() throws org.apache.thrift.TException {
+        public long recv_echoI64() throws org.apache.thrift.TException
+        {
             echoI64_result result = new echoI64_result();
             receiveBase(result, "echoI64");
             if (result.isSetSuccess()) {
@@ -162,18 +181,21 @@ public long recv_echoI64() throws org.apache.thrift.TException {
             throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echoI64 failed: unknown result");
         }
 
-        public double echoDouble(double arg) throws org.apache.thrift.TException {
+        public double echoDouble(double arg) throws org.apache.thrift.TException
+        {
             send_echoDouble(arg);
             return recv_echoDouble();
         }
 
-        public void send_echoDouble(double arg) throws org.apache.thrift.TException {
+        public void send_echoDouble(double arg) throws org.apache.thrift.TException
+        {
             echoDouble_args args = new echoDouble_args();
             args.setArg(arg);
             sendBase("echoDouble", args);
         }
 
-        public double recv_echoDouble() throws org.apache.thrift.TException {
+        public double recv_echoDouble() throws org.apache.thrift.TException
+        {
             echoDouble_result result = new echoDouble_result();
             receiveBase(result, "echoDouble");
             if (result.isSetSuccess()) {
@@ -182,18 +204,21 @@ public double recv_echoDouble() throws org.apache.thrift.TException {
             throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echoDouble failed: unknown result");
         }
 
-        public String echoString(String arg) throws org.apache.thrift.TException {
+        public java.lang.String echoString(java.lang.String arg) throws org.apache.thrift.TException
+        {
             send_echoString(arg);
             return recv_echoString();
         }
 
-        public void send_echoString(String arg) throws org.apache.thrift.TException {
+        public void send_echoString(java.lang.String arg) throws org.apache.thrift.TException
+        {
             echoString_args args = new echoString_args();
             args.setArg(arg);
             sendBase("echoString", args);
         }
 
-        public String recv_echoString() throws org.apache.thrift.TException {
+        public java.lang.String recv_echoString() throws org.apache.thrift.TException
+        {
             echoString_result result = new echoString_result();
             receiveBase(result, "echoString");
             if (result.isSetSuccess()) {
@@ -202,93 +227,34 @@ public String recv_echoString() throws org.apache.thrift.TException {
             throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echoString failed: unknown result");
         }
 
-        public static class Factory implements org.apache.thrift.TServiceClientFactory<Client> {
-            public Factory() {
-            }
-
-            public Client getClient(org.apache.thrift.protocol.TProtocol prot) {
-                return new Client(prot);
-            }
-
-            public Client getClient(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) {
-                return new Client(iprot, oprot);
-            }
-        }
-
     }
-
     public static class AsyncClient extends org.apache.thrift.async.TAsyncClient implements AsyncIface {
-        public AsyncClient(org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.transport.TNonblockingTransport transport) {
-            super(protocolFactory, clientManager, transport);
-        }
-
-        public void echoBool(boolean arg, org.apache.thrift.async.AsyncMethodCallback<echoBool_call> resultHandler) throws org.apache.thrift.TException {
-            checkReady();
-            echoBool_call method_call = new echoBool_call(arg, resultHandler, this, ___protocolFactory, ___transport);
-            this.___currentMethod = method_call;
-            ___manager.call(method_call);
-        }
-
-        public void echoByte(byte arg, org.apache.thrift.async.AsyncMethodCallback<echoByte_call> resultHandler) throws org.apache.thrift.TException {
-            checkReady();
-            echoByte_call method_call = new echoByte_call(arg, resultHandler, this, ___protocolFactory, ___transport);
-            this.___currentMethod = method_call;
-            ___manager.call(method_call);
-        }
-
-        public void echoI16(short arg, org.apache.thrift.async.AsyncMethodCallback<echoI16_call> resultHandler) throws org.apache.thrift.TException {
-            checkReady();
-            echoI16_call method_call = new echoI16_call(arg, resultHandler, this, ___protocolFactory, ___transport);
-            this.___currentMethod = method_call;
-            ___manager.call(method_call);
-        }
-
-        public void echoI32(int arg, org.apache.thrift.async.AsyncMethodCallback<echoI32_call> resultHandler) throws org.apache.thrift.TException {
-            checkReady();
-            echoI32_call method_call = new echoI32_call(arg, resultHandler, this, ___protocolFactory, ___transport);
-            this.___currentMethod = method_call;
-            ___manager.call(method_call);
-        }
-
-        public void echoI64(long arg, org.apache.thrift.async.AsyncMethodCallback<echoI64_call> resultHandler) throws org.apache.thrift.TException {
-            checkReady();
-            echoI64_call method_call = new echoI64_call(arg, resultHandler, this, ___protocolFactory, ___transport);
-            this.___currentMethod = method_call;
-            ___manager.call(method_call);
-        }
-
-        public void echoDouble(double arg, org.apache.thrift.async.AsyncMethodCallback<echoDouble_call> resultHandler) throws org.apache.thrift.TException {
-            checkReady();
-            echoDouble_call method_call = new echoDouble_call(arg, resultHandler, this, ___protocolFactory, ___transport);
-            this.___currentMethod = method_call;
-            ___manager.call(method_call);
-        }
-
-        public void echoString(String arg, org.apache.thrift.async.AsyncMethodCallback<echoString_call> resultHandler) throws org.apache.thrift.TException {
-            checkReady();
-            echoString_call method_call = new echoString_call(arg, resultHandler, this, ___protocolFactory, ___transport);
-            this.___currentMethod = method_call;
-            ___manager.call(method_call);
-        }
-
         public static class Factory implements org.apache.thrift.async.TAsyncClientFactory<AsyncClient> {
             private org.apache.thrift.async.TAsyncClientManager clientManager;
             private org.apache.thrift.protocol.TProtocolFactory protocolFactory;
-
             public Factory(org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.protocol.TProtocolFactory protocolFactory) {
                 this.clientManager = clientManager;
                 this.protocolFactory = protocolFactory;
             }
-
             public AsyncClient getAsyncClient(org.apache.thrift.transport.TNonblockingTransport transport) {
                 return new AsyncClient(protocolFactory, clientManager, transport);
             }
         }
 
-        public static class echoBool_call extends org.apache.thrift.async.TAsyncMethodCall {
-            private boolean arg;
+        public AsyncClient(org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.transport.TNonblockingTransport transport) {
+            super(protocolFactory, clientManager, transport);
+        }
+
+        public void echoBool(boolean arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+            checkReady();
+            echoBool_call method_call = new echoBool_call(arg, resultHandler, this, ___protocolFactory, ___transport);
+            this.___currentMethod = method_call;
+            ___manager.call(method_call);
+        }
 
-            public echoBool_call(boolean arg, org.apache.thrift.async.AsyncMethodCallback<echoBool_call> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        public static class echoBool_call extends org.apache.thrift.async.TAsyncMethodCall<java.lang.Boolean> {
+            private boolean arg;
+            public echoBool_call(boolean arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
                 super(client, protocolFactory, transport, resultHandler, false);
                 this.arg = arg;
             }
@@ -301,9 +267,9 @@ public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apa
                 prot.writeMessageEnd();
             }
 
-            public boolean getResult() throws org.apache.thrift.TException {
+            public java.lang.Boolean getResult() throws org.apache.thrift.TException {
                 if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
-                    throw new IllegalStateException("Method call not finished!");
+                    throw new java.lang.IllegalStateException("Method call not finished!");
                 }
                 org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
                 org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
@@ -311,10 +277,16 @@ public boolean getResult() throws org.apache.thrift.TException {
             }
         }
 
-        public static class echoByte_call extends org.apache.thrift.async.TAsyncMethodCall {
-            private byte arg;
+        public void echoByte(byte arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Byte> resultHandler) throws org.apache.thrift.TException {
+            checkReady();
+            echoByte_call method_call = new echoByte_call(arg, resultHandler, this, ___protocolFactory, ___transport);
+            this.___currentMethod = method_call;
+            ___manager.call(method_call);
+        }
 
-            public echoByte_call(byte arg, org.apache.thrift.async.AsyncMethodCallback<echoByte_call> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        public static class echoByte_call extends org.apache.thrift.async.TAsyncMethodCall<java.lang.Byte> {
+            private byte arg;
+            public echoByte_call(byte arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Byte> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
                 super(client, protocolFactory, transport, resultHandler, false);
                 this.arg = arg;
             }
@@ -327,9 +299,9 @@ public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apa
                 prot.writeMessageEnd();
             }
 
-            public byte getResult() throws org.apache.thrift.TException {
+            public java.lang.Byte getResult() throws org.apache.thrift.TException {
                 if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
-                    throw new IllegalStateException("Method call not finished!");
+                    throw new java.lang.IllegalStateException("Method call not finished!");
                 }
                 org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
                 org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
@@ -337,10 +309,16 @@ public byte getResult() throws org.apache.thrift.TException {
             }
         }
 
-        public static class echoI16_call extends org.apache.thrift.async.TAsyncMethodCall {
-            private short arg;
+        public void echoI16(short arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Short> resultHandler) throws org.apache.thrift.TException {
+            checkReady();
+            echoI16_call method_call = new echoI16_call(arg, resultHandler, this, ___protocolFactory, ___transport);
+            this.___currentMethod = method_call;
+            ___manager.call(method_call);
+        }
 
-            public echoI16_call(short arg, org.apache.thrift.async.AsyncMethodCallback<echoI16_call> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        public static class echoI16_call extends org.apache.thrift.async.TAsyncMethodCall<java.lang.Short> {
+            private short arg;
+            public echoI16_call(short arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Short> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
                 super(client, protocolFactory, transport, resultHandler, false);
                 this.arg = arg;
             }
@@ -353,9 +331,9 @@ public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apa
                 prot.writeMessageEnd();
             }
 
-            public short getResult() throws org.apache.thrift.TException {
+            public java.lang.Short getResult() throws org.apache.thrift.TException {
                 if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
-                    throw new IllegalStateException("Method call not finished!");
+                    throw new java.lang.IllegalStateException("Method call not finished!");
                 }
                 org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
                 org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
@@ -363,10 +341,16 @@ public short getResult() throws org.apache.thrift.TException {
             }
         }
 
-        public static class echoI32_call extends org.apache.thrift.async.TAsyncMethodCall {
-            private int arg;
+        public void echoI32(int arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Integer> resultHandler) throws org.apache.thrift.TException {
+            checkReady();
+            echoI32_call method_call = new echoI32_call(arg, resultHandler, this, ___protocolFactory, ___transport);
+            this.___currentMethod = method_call;
+            ___manager.call(method_call);
+        }
 
-            public echoI32_call(int arg, org.apache.thrift.async.AsyncMethodCallback<echoI32_call> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        public static class echoI32_call extends org.apache.thrift.async.TAsyncMethodCall<java.lang.Integer> {
+            private int arg;
+            public echoI32_call(int arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Integer> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
                 super(client, protocolFactory, transport, resultHandler, false);
                 this.arg = arg;
             }
@@ -379,9 +363,9 @@ public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apa
                 prot.writeMessageEnd();
             }
 
-            public int getResult() throws org.apache.thrift.TException {
+            public java.lang.Integer getResult() throws org.apache.thrift.TException {
                 if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
-                    throw new IllegalStateException("Method call not finished!");
+                    throw new java.lang.IllegalStateException("Method call not finished!");
                 }
                 org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
                 org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
@@ -389,10 +373,16 @@ public int getResult() throws org.apache.thrift.TException {
             }
         }
 
-        public static class echoI64_call extends org.apache.thrift.async.TAsyncMethodCall {
-            private long arg;
+        public void echoI64(long arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Long> resultHandler) throws org.apache.thrift.TException {
+            checkReady();
+            echoI64_call method_call = new echoI64_call(arg, resultHandler, this, ___protocolFactory, ___transport);
+            this.___currentMethod = method_call;
+            ___manager.call(method_call);
+        }
 
-            public echoI64_call(long arg, org.apache.thrift.async.AsyncMethodCallback<echoI64_call> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        public static class echoI64_call extends org.apache.thrift.async.TAsyncMethodCall<java.lang.Long> {
+            private long arg;
+            public echoI64_call(long arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Long> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
                 super(client, protocolFactory, transport, resultHandler, false);
                 this.arg = arg;
             }
@@ -405,9 +395,9 @@ public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apa
                 prot.writeMessageEnd();
             }
 
-            public long getResult() throws org.apache.thrift.TException {
+            public java.lang.Long getResult() throws org.apache.thrift.TException {
                 if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
-                    throw new IllegalStateException("Method call not finished!");
+                    throw new java.lang.IllegalStateException("Method call not finished!");
                 }
                 org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
                 org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
@@ -415,10 +405,16 @@ public long getResult() throws org.apache.thrift.TException {
             }
         }
 
-        public static class echoDouble_call extends org.apache.thrift.async.TAsyncMethodCall {
-            private double arg;
+        public void echoDouble(double arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Double> resultHandler) throws org.apache.thrift.TException {
+            checkReady();
+            echoDouble_call method_call = new echoDouble_call(arg, resultHandler, this, ___protocolFactory, ___transport);
+            this.___currentMethod = method_call;
+            ___manager.call(method_call);
+        }
 
-            public echoDouble_call(double arg, org.apache.thrift.async.AsyncMethodCallback<echoDouble_call> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        public static class echoDouble_call extends org.apache.thrift.async.TAsyncMethodCall<java.lang.Double> {
+            private double arg;
+            public echoDouble_call(double arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.Double> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
                 super(client, protocolFactory, transport, resultHandler, false);
                 this.arg = arg;
             }
@@ -431,9 +427,9 @@ public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apa
                 prot.writeMessageEnd();
             }
 
-            public double getResult() throws org.apache.thrift.TException {
+            public java.lang.Double getResult() throws org.apache.thrift.TException {
                 if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
-                    throw new IllegalStateException("Method call not finished!");
+                    throw new java.lang.IllegalStateException("Method call not finished!");
                 }
                 org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
                 org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
@@ -441,10 +437,16 @@ public double getResult() throws org.apache.thrift.TException {
             }
         }
 
-        public static class echoString_call extends org.apache.thrift.async.TAsyncMethodCall {
-            private String arg;
+        public void echoString(java.lang.String arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException {
+            checkReady();
+            echoString_call method_call = new echoString_call(arg, resultHandler, this, ___protocolFactory, ___transport);
+            this.___currentMethod = method_call;
+            ___manager.call(method_call);
+        }
 
-            public echoString_call(String arg, org.apache.thrift.async.AsyncMethodCallback<echoString_call> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        public static class echoString_call extends org.apache.thrift.async.TAsyncMethodCall<java.lang.String> {
+            private java.lang.String arg;
+            public echoString_call(java.lang.String arg, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
                 super(client, protocolFactory, transport, resultHandler, false);
                 this.arg = arg;
             }
@@ -457,9 +459,9 @@ public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apa
                 prot.writeMessageEnd();
             }
 
-            public String getResult() throws org.apache.thrift.TException {
+            public java.lang.String getResult() throws org.apache.thrift.TException {
                 if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
-                    throw new IllegalStateException("Method call not finished!");
+                    throw new java.lang.IllegalStateException("Method call not finished!");
                 }
                 org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
                 org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
@@ -469,18 +471,17 @@ public String getResult() throws org.apache.thrift.TException {
 
     }
 
-    public static class Processor<I extends Iface> extends org.apache.thrift.TBaseProcessor implements org.apache.thrift.TProcessor {
-        private static final Logger LOGGER = LoggerFactory.getLogger(Processor.class.getName());
-
+    public static class Processor<I extends Iface> extends org.apache.thrift.TBaseProcessor<I> implements org.apache.thrift.TProcessor {
+        private static final org.slf4j.Logger _LOGGER = org.slf4j.LoggerFactory.getLogger(Processor.class.getName());
         public Processor(I iface) {
-            super(iface, getProcessMap(new HashMap<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>>()));
+            super(iface, getProcessMap(new java.util.HashMap<java.lang.String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>>()));
         }
 
-        protected Processor(I iface, Map<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> processMap) {
+        protected Processor(I iface, java.util.Map<java.lang.String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> processMap) {
             super(iface, getProcessMap(processMap));
         }
 
-        private static <I extends Iface> Map<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> getProcessMap(Map<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> processMap) {
+        private static <I extends Iface> java.util.Map<java.lang.String,  org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> getProcessMap(java.util.Map<java.lang.String, org.apache.thrift.ProcessFunction<I, ? extends  org.apache.thrift.TBase>> processMap) {
             processMap.put("echoBool", new echoBool());
             processMap.put("echoByte", new echoByte());
             processMap.put("echoI16", new echoI16());
@@ -491,16 +492,25 @@ protected Processor(I iface, Map<String, org.apache.thrift.ProcessFunction<I, ?
             return processMap;
         }
 
-        private static class echoBool<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoBool_args> {
+        public static class echoBool<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoBool_args> {
             public echoBool() {
                 super("echoBool");
             }
 
-            protected echoBool_args getEmptyArgsInstance() {
+            public echoBool_args getEmptyArgsInstance() {
                 return new echoBool_args();
             }
 
-            protected echoBool_result getResult(I iface, echoBool_args args) throws org.apache.thrift.TException {
+            protected boolean isOneway() {
+                return false;
+            }
+
+            @Override
+            protected boolean handleRuntimeExceptions() {
+                return false;
+            }
+
+            public echoBool_result getResult(I iface, echoBool_args args) throws org.apache.thrift.TException {
                 echoBool_result result = new echoBool_result();
                 result.success = iface.echoBool(args.arg);
                 result.setSuccessIsSet(true);
@@ -508,16 +518,25 @@ protected echoBool_result getResult(I iface, echoBool_args args) throws org.apac
             }
         }
 
-        private static class echoByte<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoByte_args> {
+        public static class echoByte<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoByte_args> {
             public echoByte() {
                 super("echoByte");
             }
 
-            protected echoByte_args getEmptyArgsInstance() {
+            public echoByte_args getEmptyArgsInstance() {
                 return new echoByte_args();
             }
 
-            protected echoByte_result getResult(I iface, echoByte_args args) throws org.apache.thrift.TException {
+            protected boolean isOneway() {
+                return false;
+            }
+
+            @Override
+            protected boolean handleRuntimeExceptions() {
+                return false;
+            }
+
+            public echoByte_result getResult(I iface, echoByte_args args) throws org.apache.thrift.TException {
                 echoByte_result result = new echoByte_result();
                 result.success = iface.echoByte(args.arg);
                 result.setSuccessIsSet(true);
@@ -525,16 +544,25 @@ protected echoByte_result getResult(I iface, echoByte_args args) throws org.apac
             }
         }
 
-        private static class echoI16<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoI16_args> {
+        public static class echoI16<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoI16_args> {
             public echoI16() {
                 super("echoI16");
             }
 
-            protected echoI16_args getEmptyArgsInstance() {
+            public echoI16_args getEmptyArgsInstance() {
                 return new echoI16_args();
             }
 
-            protected echoI16_result getResult(I iface, echoI16_args args) throws org.apache.thrift.TException {
+            protected boolean isOneway() {
+                return false;
+            }
+
+            @Override
+            protected boolean handleRuntimeExceptions() {
+                return false;
+            }
+
+            public echoI16_result getResult(I iface, echoI16_args args) throws org.apache.thrift.TException {
                 echoI16_result result = new echoI16_result();
                 result.success = iface.echoI16(args.arg);
                 result.setSuccessIsSet(true);
@@ -542,16 +570,25 @@ protected echoI16_result getResult(I iface, echoI16_args args) throws org.apache
             }
         }
 
-        private static class echoI32<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoI32_args> {
+        public static class echoI32<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoI32_args> {
             public echoI32() {
                 super("echoI32");
             }
 
-            protected echoI32_args getEmptyArgsInstance() {
+            public echoI32_args getEmptyArgsInstance() {
                 return new echoI32_args();
             }
 
-            protected echoI32_result getResult(I iface, echoI32_args args) throws org.apache.thrift.TException {
+            protected boolean isOneway() {
+                return false;
+            }
+
+            @Override
+            protected boolean handleRuntimeExceptions() {
+                return false;
+            }
+
+            public echoI32_result getResult(I iface, echoI32_args args) throws org.apache.thrift.TException {
                 echoI32_result result = new echoI32_result();
                 result.success = iface.echoI32(args.arg);
                 result.setSuccessIsSet(true);
@@ -559,16 +596,25 @@ protected echoI32_result getResult(I iface, echoI32_args args) throws org.apache
             }
         }
 
-        private static class echoI64<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoI64_args> {
+        public static class echoI64<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoI64_args> {
             public echoI64() {
                 super("echoI64");
             }
 
-            protected echoI64_args getEmptyArgsInstance() {
+            public echoI64_args getEmptyArgsInstance() {
                 return new echoI64_args();
             }
 
-            protected echoI64_result getResult(I iface, echoI64_args args) throws org.apache.thrift.TException {
+            protected boolean isOneway() {
+                return false;
+            }
+
+            @Override
+            protected boolean handleRuntimeExceptions() {
+                return false;
+            }
+
+            public echoI64_result getResult(I iface, echoI64_args args) throws org.apache.thrift.TException {
                 echoI64_result result = new echoI64_result();
                 result.success = iface.echoI64(args.arg);
                 result.setSuccessIsSet(true);
@@ -576,16 +622,25 @@ protected echoI64_result getResult(I iface, echoI64_args args) throws org.apache
             }
         }
 
-        private static class echoDouble<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoDouble_args> {
+        public static class echoDouble<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoDouble_args> {
             public echoDouble() {
                 super("echoDouble");
             }
 
-            protected echoDouble_args getEmptyArgsInstance() {
+            public echoDouble_args getEmptyArgsInstance() {
                 return new echoDouble_args();
             }
 
-            protected echoDouble_result getResult(I iface, echoDouble_args args) throws org.apache.thrift.TException {
+            protected boolean isOneway() {
+                return false;
+            }
+
+            @Override
+            protected boolean handleRuntimeExceptions() {
+                return false;
+            }
+
+            public echoDouble_result getResult(I iface, echoDouble_args args) throws org.apache.thrift.TException {
                 echoDouble_result result = new echoDouble_result();
                 result.success = iface.echoDouble(args.arg);
                 result.setSuccessIsSet(true);
@@ -593,16 +648,25 @@ protected echoDouble_result getResult(I iface, echoDouble_args args) throws org.
             }
         }
 
-        private static class echoString<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoString_args> {
+        public static class echoString<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echoString_args> {
             public echoString() {
                 super("echoString");
             }
 
-            protected echoString_args getEmptyArgsInstance() {
+            public echoString_args getEmptyArgsInstance() {
                 return new echoString_args();
             }
 
-            protected echoString_result getResult(I iface, echoString_args args) throws org.apache.thrift.TException {
+            protected boolean isOneway() {
+                return false;
+            }
+
+            @Override
+            protected boolean handleRuntimeExceptions() {
+                return false;
+            }
+
+            public echoString_result getResult(I iface, echoString_args args) throws org.apache.thrift.TException {
                 echoString_result result = new echoString_result();
                 result.success = iface.echoString(args.arg);
                 return result;
@@ -611,125 +675,643 @@ protected echoString_result getResult(I iface, echoString_args args) throws org.
 
     }
 
-    public static class echoBool_args implements org.apache.thrift.TBase<echoBool_args, echoBool_args._Fields>, java.io.Serializable, Cloneable {
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoBool_args");
-        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.BOOL, (short) 1);
-        // isset id assignments
-        private static final int __ARG_ISSET_ID = 0;
-
-        static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
-            tmpMap.put(_Fields.ARG, new org.apache.thrift.meta_data.FieldMetaData("arg", org.apache.thrift.TFieldRequirementType.REQUIRED,
-                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
-            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoBool_args.class, metaDataMap);
-        }
-
-        public boolean arg; // required
-        private BitSet __isset_bit_vector = new BitSet(1);
-
-        public echoBool_args() {
+    public static class AsyncProcessor<I extends AsyncIface> extends org.apache.thrift.TBaseAsyncProcessor<I> {
+        private static final org.slf4j.Logger _LOGGER = org.slf4j.LoggerFactory.getLogger(AsyncProcessor.class.getName());
+        public AsyncProcessor(I iface) {
+            super(iface, getProcessMap(new java.util.HashMap<java.lang.String, org.apache.thrift.AsyncProcessFunction<I, ? extends org.apache.thrift.TBase, ?>>()));
         }
 
-        public echoBool_args(
-                boolean arg) {
-            this();
-            this.arg = arg;
-            setArgIsSet(true);
+        protected AsyncProcessor(I iface, java.util.Map<java.lang.String,  org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase, ?>> processMap) {
+            super(iface, getProcessMap(processMap));
         }
 
-        /**
-         * Performs a deep copy on <i>other</i>.
-         */
-        public echoBool_args(echoBool_args other) {
-            __isset_bit_vector.clear();
-            __isset_bit_vector.or(other.__isset_bit_vector);
-            this.arg = other.arg;
+        private static <I extends AsyncIface> java.util.Map<java.lang.String,  org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase,?>> getProcessMap(java.util.Map<java.lang.String,  org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase, ?>> processMap) {
+            processMap.put("echoBool", new echoBool());
+            processMap.put("echoByte", new echoByte());
+            processMap.put("echoI16", new echoI16());
+            processMap.put("echoI32", new echoI32());
+            processMap.put("echoI64", new echoI64());
+            processMap.put("echoDouble", new echoDouble());
+            processMap.put("echoString", new echoString());
+            return processMap;
         }
 
-        public echoBool_args deepCopy() {
-            return new echoBool_args(this);
-        }
+        public static class echoBool<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echoBool_args, java.lang.Boolean> {
+            public echoBool() {
+                super("echoBool");
+            }
 
-        public void clear() {
-            setArgIsSet(false);
-            this.arg = false;
-        }
+            public echoBool_args getEmptyArgsInstance() {
+                return new echoBool_args();
+            }
 
-        public boolean isArg() {
-            return this.arg;
-        }
+            public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+                final org.apache.thrift.AsyncProcessFunction fcall = this;
+                return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() {
+                    public void onComplete(java.lang.Boolean o) {
+                        echoBool_result result = new echoBool_result();
+                        result.success = o;
+                        result.setSuccessIsSet(true);
+                        try {
+                            fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+                        } catch (org.apache.thrift.transport.TTransportException e) {
+                            _LOGGER.error("TTransportException writing to internal frame buffer", e);
+                            fb.close();
+                        } catch (java.lang.Exception e) {
+                            _LOGGER.error("Exception writing to internal frame buffer", e);
+                            onError(e);
+                        }
+                    }
+                    public void onError(java.lang.Exception e) {
+                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+                        org.apache.thrift.TSerializable msg;
+                        echoBool_result result = new echoBool_result();
+                        if (e instanceof org.apache.thrift.transport.TTransportException) {
+                            _LOGGER.error("TTransportException inside handler", e);
+                            fb.close();
+                            return;
+                        } else if (e instanceof org.apache.thrift.TApplicationException) {
+                            _LOGGER.error("TApplicationException inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = (org.apache.thrift.TApplicationException)e;
+                        } else {
+                            _LOGGER.error("Exception inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+                        }
+                        try {
+                            fcall.sendResponse(fb,msg,msgType,seqid);
+                        } catch (java.lang.Exception ex) {
+                            _LOGGER.error("Exception writing to internal frame buffer", ex);
+                            fb.close();
+                        }
+                    }
+                };
+            }
 
-        public echoBool_args setArg(boolean arg) {
-            this.arg = arg;
-            setArgIsSet(true);
-            return this;
-        }
+            protected boolean isOneway() {
+                return false;
+            }
 
-        public void unsetArg() {
-            __isset_bit_vector.clear(__ARG_ISSET_ID);
+            public void start(I iface, echoBool_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+                iface.echoBool(args.arg,resultHandler);
+            }
         }
 
-        /**
-         * Returns true if field arg is set (has been assigned a value) and false otherwise
-         */
-        public boolean isSetArg() {
-            return __isset_bit_vector.get(__ARG_ISSET_ID);
-        }
+        public static class echoByte<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echoByte_args, java.lang.Byte> {
+            public echoByte() {
+                super("echoByte");
+            }
 
-        public void setArgIsSet(boolean value) {
-            __isset_bit_vector.set(__ARG_ISSET_ID, value);
-        }
+            public echoByte_args getEmptyArgsInstance() {
+                return new echoByte_args();
+            }
 
-        public void setFieldValue(_Fields field, Object value) {
-            switch (field) {
-                case ARG:
-                    if (value == null) {
-                        unsetArg();
-                    } else {
-                        setArg((Boolean) value);
+            public org.apache.thrift.async.AsyncMethodCallback<java.lang.Byte> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+                final org.apache.thrift.AsyncProcessFunction fcall = this;
+                return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Byte>() {
+                    public void onComplete(java.lang.Byte o) {
+                        echoByte_result result = new echoByte_result();
+                        result.success = o;
+                        result.setSuccessIsSet(true);
+                        try {
+                            fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+                        } catch (org.apache.thrift.transport.TTransportException e) {
+                            _LOGGER.error("TTransportException writing to internal frame buffer", e);
+                            fb.close();
+                        } catch (java.lang.Exception e) {
+                            _LOGGER.error("Exception writing to internal frame buffer", e);
+                            onError(e);
+                        }
                     }
-                    break;
-
+                    public void onError(java.lang.Exception e) {
+                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+                        org.apache.thrift.TSerializable msg;
+                        echoByte_result result = new echoByte_result();
+                        if (e instanceof org.apache.thrift.transport.TTransportException) {
+                            _LOGGER.error("TTransportException inside handler", e);
+                            fb.close();
+                            return;
+                        } else if (e instanceof org.apache.thrift.TApplicationException) {
+                            _LOGGER.error("TApplicationException inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = (org.apache.thrift.TApplicationException)e;
+                        } else {
+                            _LOGGER.error("Exception inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+                        }
+                        try {
+                            fcall.sendResponse(fb,msg,msgType,seqid);
+                        } catch (java.lang.Exception ex) {
+                            _LOGGER.error("Exception writing to internal frame buffer", ex);
+                            fb.close();
+                        }
+                    }
+                };
             }
-        }
 
-        public Object getFieldValue(_Fields field) {
-            switch (field) {
-                case ARG:
-                    return Boolean.valueOf(isArg());
+            protected boolean isOneway() {
+                return false;
+            }
 
+            public void start(I iface, echoByte_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Byte> resultHandler) throws org.apache.thrift.TException {
+                iface.echoByte(args.arg,resultHandler);
             }
-            throw new IllegalStateException();
         }
 
-        /**
-         * Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise
+        public static class echoI16<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echoI16_args, java.lang.Short> {
+            public echoI16() {
+                super("echoI16");
+            }
+
+            public echoI16_args getEmptyArgsInstance() {
+                return new echoI16_args();
+            }
+
+            public org.apache.thrift.async.AsyncMethodCallback<java.lang.Short> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+                final org.apache.thrift.AsyncProcessFunction fcall = this;
+                return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Short>() {
+                    public void onComplete(java.lang.Short o) {
+                        echoI16_result result = new echoI16_result();
+                        result.success = o;
+                        result.setSuccessIsSet(true);
+                        try {
+                            fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+                        } catch (org.apache.thrift.transport.TTransportException e) {
+                            _LOGGER.error("TTransportException writing to internal frame buffer", e);
+                            fb.close();
+                        } catch (java.lang.Exception e) {
+                            _LOGGER.error("Exception writing to internal frame buffer", e);
+                            onError(e);
+                        }
+                    }
+                    public void onError(java.lang.Exception e) {
+                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+                        org.apache.thrift.TSerializable msg;
+                        echoI16_result result = new echoI16_result();
+                        if (e instanceof org.apache.thrift.transport.TTransportException) {
+                            _LOGGER.error("TTransportException inside handler", e);
+                            fb.close();
+                            return;
+                        } else if (e instanceof org.apache.thrift.TApplicationException) {
+                            _LOGGER.error("TApplicationException inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = (org.apache.thrift.TApplicationException)e;
+                        } else {
+                            _LOGGER.error("Exception inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+                        }
+                        try {
+                            fcall.sendResponse(fb,msg,msgType,seqid);
+                        } catch (java.lang.Exception ex) {
+                            _LOGGER.error("Exception writing to internal frame buffer", ex);
+                            fb.close();
+                        }
+                    }
+                };
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public void start(I iface, echoI16_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Short> resultHandler) throws org.apache.thrift.TException {
+                iface.echoI16(args.arg,resultHandler);
+            }
+        }
+
+        public static class echoI32<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echoI32_args, java.lang.Integer> {
+            public echoI32() {
+                super("echoI32");
+            }
+
+            public echoI32_args getEmptyArgsInstance() {
+                return new echoI32_args();
+            }
+
+            public org.apache.thrift.async.AsyncMethodCallback<java.lang.Integer> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+                final org.apache.thrift.AsyncProcessFunction fcall = this;
+                return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Integer>() {
+                    public void onComplete(java.lang.Integer o) {
+                        echoI32_result result = new echoI32_result();
+                        result.success = o;
+                        result.setSuccessIsSet(true);
+                        try {
+                            fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+                        } catch (org.apache.thrift.transport.TTransportException e) {
+                            _LOGGER.error("TTransportException writing to internal frame buffer", e);
+                            fb.close();
+                        } catch (java.lang.Exception e) {
+                            _LOGGER.error("Exception writing to internal frame buffer", e);
+                            onError(e);
+                        }
+                    }
+                    public void onError(java.lang.Exception e) {
+                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+                        org.apache.thrift.TSerializable msg;
+                        echoI32_result result = new echoI32_result();
+                        if (e instanceof org.apache.thrift.transport.TTransportException) {
+                            _LOGGER.error("TTransportException inside handler", e);
+                            fb.close();
+                            return;
+                        } else if (e instanceof org.apache.thrift.TApplicationException) {
+                            _LOGGER.error("TApplicationException inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = (org.apache.thrift.TApplicationException)e;
+                        } else {
+                            _LOGGER.error("Exception inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+                        }
+                        try {
+                            fcall.sendResponse(fb,msg,msgType,seqid);
+                        } catch (java.lang.Exception ex) {
+                            _LOGGER.error("Exception writing to internal frame buffer", ex);
+                            fb.close();
+                        }
+                    }
+                };
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public void start(I iface, echoI32_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Integer> resultHandler) throws org.apache.thrift.TException {
+                iface.echoI32(args.arg,resultHandler);
+            }
+        }
+
+        public static class echoI64<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echoI64_args, java.lang.Long> {
+            public echoI64() {
+                super("echoI64");
+            }
+
+            public echoI64_args getEmptyArgsInstance() {
+                return new echoI64_args();
+            }
+
+            public org.apache.thrift.async.AsyncMethodCallback<java.lang.Long> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+                final org.apache.thrift.AsyncProcessFunction fcall = this;
+                return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Long>() {
+                    public void onComplete(java.lang.Long o) {
+                        echoI64_result result = new echoI64_result();
+                        result.success = o;
+                        result.setSuccessIsSet(true);
+                        try {
+                            fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+                        } catch (org.apache.thrift.transport.TTransportException e) {
+                            _LOGGER.error("TTransportException writing to internal frame buffer", e);
+                            fb.close();
+                        } catch (java.lang.Exception e) {
+                            _LOGGER.error("Exception writing to internal frame buffer", e);
+                            onError(e);
+                        }
+                    }
+                    public void onError(java.lang.Exception e) {
+                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+                        org.apache.thrift.TSerializable msg;
+                        echoI64_result result = new echoI64_result();
+                        if (e instanceof org.apache.thrift.transport.TTransportException) {
+                            _LOGGER.error("TTransportException inside handler", e);
+                            fb.close();
+                            return;
+                        } else if (e instanceof org.apache.thrift.TApplicationException) {
+                            _LOGGER.error("TApplicationException inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = (org.apache.thrift.TApplicationException)e;
+                        } else {
+                            _LOGGER.error("Exception inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+                        }
+                        try {
+                            fcall.sendResponse(fb,msg,msgType,seqid);
+                        } catch (java.lang.Exception ex) {
+                            _LOGGER.error("Exception writing to internal frame buffer", ex);
+                            fb.close();
+                        }
+                    }
+                };
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public void start(I iface, echoI64_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Long> resultHandler) throws org.apache.thrift.TException {
+                iface.echoI64(args.arg,resultHandler);
+            }
+        }
+
+        public static class echoDouble<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echoDouble_args, java.lang.Double> {
+            public echoDouble() {
+                super("echoDouble");
+            }
+
+            public echoDouble_args getEmptyArgsInstance() {
+                return new echoDouble_args();
+            }
+
+            public org.apache.thrift.async.AsyncMethodCallback<java.lang.Double> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+                final org.apache.thrift.AsyncProcessFunction fcall = this;
+                return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Double>() {
+                    public void onComplete(java.lang.Double o) {
+                        echoDouble_result result = new echoDouble_result();
+                        result.success = o;
+                        result.setSuccessIsSet(true);
+                        try {
+                            fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+                        } catch (org.apache.thrift.transport.TTransportException e) {
+                            _LOGGER.error("TTransportException writing to internal frame buffer", e);
+                            fb.close();
+                        } catch (java.lang.Exception e) {
+                            _LOGGER.error("Exception writing to internal frame buffer", e);
+                            onError(e);
+                        }
+                    }
+                    public void onError(java.lang.Exception e) {
+                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+                        org.apache.thrift.TSerializable msg;
+                        echoDouble_result result = new echoDouble_result();
+                        if (e instanceof org.apache.thrift.transport.TTransportException) {
+                            _LOGGER.error("TTransportException inside handler", e);
+                            fb.close();
+                            return;
+                        } else if (e instanceof org.apache.thrift.TApplicationException) {
+                            _LOGGER.error("TApplicationException inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = (org.apache.thrift.TApplicationException)e;
+                        } else {
+                            _LOGGER.error("Exception inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+                        }
+                        try {
+                            fcall.sendResponse(fb,msg,msgType,seqid);
+                        } catch (java.lang.Exception ex) {
+                            _LOGGER.error("Exception writing to internal frame buffer", ex);
+                            fb.close();
+                        }
+                    }
+                };
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public void start(I iface, echoDouble_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Double> resultHandler) throws org.apache.thrift.TException {
+                iface.echoDouble(args.arg,resultHandler);
+            }
+        }
+
+        public static class echoString<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echoString_args, java.lang.String> {
+            public echoString() {
+                super("echoString");
+            }
+
+            public echoString_args getEmptyArgsInstance() {
+                return new echoString_args();
+            }
+
+            public org.apache.thrift.async.AsyncMethodCallback<java.lang.String> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+                final org.apache.thrift.AsyncProcessFunction fcall = this;
+                return new org.apache.thrift.async.AsyncMethodCallback<java.lang.String>() {
+                    public void onComplete(java.lang.String o) {
+                        echoString_result result = new echoString_result();
+                        result.success = o;
+                        try {
+                            fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+                        } catch (org.apache.thrift.transport.TTransportException e) {
+                            _LOGGER.error("TTransportException writing to internal frame buffer", e);
+                            fb.close();
+                        } catch (java.lang.Exception e) {
+                            _LOGGER.error("Exception writing to internal frame buffer", e);
+                            onError(e);
+                        }
+                    }
+                    public void onError(java.lang.Exception e) {
+                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+                        org.apache.thrift.TSerializable msg;
+                        echoString_result result = new echoString_result();
+                        if (e instanceof org.apache.thrift.transport.TTransportException) {
+                            _LOGGER.error("TTransportException inside handler", e);
+                            fb.close();
+                            return;
+                        } else if (e instanceof org.apache.thrift.TApplicationException) {
+                            _LOGGER.error("TApplicationException inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = (org.apache.thrift.TApplicationException)e;
+                        } else {
+                            _LOGGER.error("Exception inside handler", e);
+                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+                            msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+                        }
+                        try {
+                            fcall.sendResponse(fb,msg,msgType,seqid);
+                        } catch (java.lang.Exception ex) {
+                            _LOGGER.error("Exception writing to internal frame buffer", ex);
+                            fb.close();
+                        }
+                    }
+                };
+            }
+
+            protected boolean isOneway() {
+                return false;
+            }
+
+            public void start(I iface, echoString_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException {
+                iface.echoString(args.arg,resultHandler);
+            }
+        }
+
+    }
+
+    public static class echoBool_args implements org.apache.thrift.TBase<echoBool_args, echoBool_args._Fields>, java.io.Serializable, Cloneable, Comparable<echoBool_args>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoBool_args");
+
+        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.BOOL, (short)1);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoBool_argsStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoBool_argsTupleSchemeFactory();
+
+        public boolean arg; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            ARG((short)1, "arg");
+
+            private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, or null if its not found.
+             */
+            public static _Fields findByThriftId(int fieldId) {
+                switch(fieldId) {
+                    case 1: // ARG
+                        return ARG;
+                    default:
+                        return null;
+                }
+            }
+
+            /**
+             * Find the _Fields constant that matches fieldId, throwing an exception
+             * if it is not found.
+             */
+            public static _Fields findByThriftIdOrThrow(int fieldId) {
+                _Fields fields = findByThriftId(fieldId);
+                if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                return fields;
+            }
+
+            /**
+             * Find the _Fields constant that matches name, or null if its not found.
+             */
+            public static _Fields findByName(java.lang.String name) {
+                return byName.get(name);
+            }
+
+            private final short _thriftId;
+            private final java.lang.String _fieldName;
+
+            _Fields(short thriftId, java.lang.String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
+            public short getThriftFieldId() {
+                return _thriftId;
+            }
+
+            public java.lang.String getFieldName() {
+                return _fieldName;
+            }
+        }
+
+        // isset id assignments
+        private static final int __ARG_ISSET_ID = 0;
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+        static {
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            tmpMap.put(_Fields.ARG, new org.apache.thrift.meta_data.FieldMetaData("arg", org.apache.thrift.TFieldRequirementType.REQUIRED,
+                                                                                  new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoBool_args.class, metaDataMap);
+        }
+
+        public echoBool_args() {
+        }
+
+        public echoBool_args(
+                boolean arg)
+        {
+            this();
+            this.arg = arg;
+            setArgIsSet(true);
+        }
+
+        /**
+         * Performs a deep copy on <i>other</i>.
          */
+        public echoBool_args(echoBool_args other) {
+            __isset_bitfield = other.__isset_bitfield;
+            this.arg = other.arg;
+        }
+
+        public echoBool_args deepCopy() {
+            return new echoBool_args(this);
+        }
+
+        @Override
+        public void clear() {
+            setArgIsSet(false);
+            this.arg = false;
+        }
+
+        public boolean isArg() {
+            return this.arg;
+        }
+
+        public echoBool_args setArg(boolean arg) {
+            this.arg = arg;
+            setArgIsSet(true);
+            return this;
+        }
+
+        public void unsetArg() {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __ARG_ISSET_ID);
+        }
+
+        /** Returns true if field arg is set (has been assigned a value) and false otherwise */
+        public boolean isSetArg() {
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __ARG_ISSET_ID);
+        }
+
+        public void setArgIsSet(boolean value) {
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __ARG_ISSET_ID, value);
+        }
+
+        public void setFieldValue(_Fields field, java.lang.Object value) {
+            switch (field) {
+                case ARG:
+                    if (value == null) {
+                        unsetArg();
+                    } else {
+                        setArg((java.lang.Boolean)value);
+                    }
+                    break;
+
+            }
+        }
+
+        public java.lang.Object getFieldValue(_Fields field) {
+            switch (field) {
+                case ARG:
+                    return isArg();
+
+            }
+            throw new java.lang.IllegalStateException();
+        }
+
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
         public boolean isSet(_Fields field) {
             if (field == null) {
-                throw new IllegalArgumentException();
+                throw new java.lang.IllegalArgumentException();
             }
 
             switch (field) {
                 case ARG:
                     return isSetArg();
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        public boolean equals(Object that) {
+        @Override
+        public boolean equals(java.lang.Object that) {
             if (that == null)
                 return false;
             if (that instanceof echoBool_args)
-                return this.equals((echoBool_args) that);
+                return this.equals((echoBool_args)that);
             return false;
         }
 
         public boolean equals(echoBool_args that) {
             if (that == null)
                 return false;
+            if (this == that)
+                return true;
 
             boolean this_present_arg = true;
             boolean that_present_arg = true;
@@ -743,24 +1325,29 @@ public boolean equals(echoBool_args that) {
             return true;
         }
 
+        @Override
         public int hashCode() {
-            return 0;
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + ((arg) ? 131071 : 524287);
+
+            return hashCode;
         }
 
+        @Override
         public int compareTo(echoBool_args other) {
             if (!getClass().equals(other.getClass())) {
                 return getClass().getName().compareTo(other.getClass().getName());
             }
 
             int lastComparison = 0;
-            echoBool_args typedOther = (echoBool_args) other;
 
-            lastComparison = Boolean.valueOf(isSetArg()).compareTo(typedOther.isSetArg());
+            lastComparison = java.lang.Boolean.valueOf(isSetArg()).compareTo(other.isSetArg());
             if (lastComparison != 0) {
                 return lastComparison;
             }
             if (isSetArg()) {
-                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, typedOther.arg);
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, other.arg);
                 if (lastComparison != 0) {
                     return lastComparison;
                 }
@@ -773,49 +1360,16 @@ public _Fields fieldForId(int fieldId) {
         }
 
         public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            org.apache.thrift.protocol.TField field;
-            iprot.readStructBegin();
-            while (true) {
-                field = iprot.readFieldBegin();
-                if (field.type == org.apache.thrift.protocol.TType.STOP) {
-                    break;
-                }
-                switch (field.id) {
-                    case 1: // ARG
-                        if (field.type == org.apache.thrift.protocol.TType.BOOL) {
-                            this.arg = iprot.readBool();
-                            setArgIsSet(true);
-                        } else {
-                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                        }
-                        break;
-                    default:
-                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                }
-                iprot.readFieldEnd();
-            }
-            iprot.readStructEnd();
-
-            // check for required fields of primitive type, which can't be checked in the validate method
-            if (!isSetArg()) {
-                throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
-            }
-            validate();
+            scheme(iprot).read(iprot, this);
         }
 
         public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            validate();
-
-            oprot.writeStructBegin(STRUCT_DESC);
-            oprot.writeFieldBegin(ARG_FIELD_DESC);
-            oprot.writeBool(this.arg);
-            oprot.writeFieldEnd();
-            oprot.writeFieldStop();
-            oprot.writeStructEnd();
+            scheme(oprot).write(oprot, this);
         }
 
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echoBool_args(");
+        @Override
+        public java.lang.String toString() {
+            java.lang.StringBuilder sb = new java.lang.StringBuilder("echoBool_args(");
             boolean first = true;
 
             sb.append("arg:");
@@ -828,6 +1382,7 @@ public String toString() {
         public void validate() throws org.apache.thrift.TException {
             // check for required fields
             // alas, we cannot check 'arg' because it's a primitive and you chose the non-beans generator.
+            // check for sub-struct validity
         }
 
         private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -838,45 +1393,125 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
             }
         }
 
-        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
             try {
                 // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
-                __isset_bit_vector = new BitSet(1);
+                __isset_bitfield = 0;
                 read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
             } catch (org.apache.thrift.TException te) {
                 throw new java.io.IOException(te);
             }
         }
 
-        /**
-         * The set of fields this struct contains, along with convenience methods for finding and manipulating them.
-         */
-        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-            ARG((short) 1, "arg");
+        private static class echoBool_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoBool_argsStandardScheme getScheme() {
+                return new echoBool_argsStandardScheme();
+            }
+        }
 
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+        private static class echoBool_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoBool_args> {
 
-            static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
-                    byName.put(field.getFieldName(), field);
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoBool_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 1: // ARG
+                            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+                                struct.arg = iprot.readBool();
+                                struct.setArgIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                if (!struct.isSetArg()) {
+                    throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
                 }
+                struct.validate();
             }
 
-            private final short _thriftId;
-            private final String _fieldName;
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoBool_args struct) throws org.apache.thrift.TException {
+                struct.validate();
 
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
+                oprot.writeStructBegin(STRUCT_DESC);
+                oprot.writeFieldBegin(ARG_FIELD_DESC);
+                oprot.writeBool(struct.arg);
+                oprot.writeFieldEnd();
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoBool_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoBool_argsTupleScheme getScheme() {
+                return new echoBool_argsTupleScheme();
+            }
+        }
+
+        private static class echoBool_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoBool_args> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoBool_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                oprot.writeBool(struct.arg);
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoBool_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                struct.arg = iprot.readBool();
+                struct.setArgIsSet(true);
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoBool_result implements org.apache.thrift.TBase<echoBool_result, echoBool_result._Fields>, java.io.Serializable, Cloneable, Comparable<echoBool_result>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoBool_result");
+
+        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.BOOL, (short)0);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoBool_resultStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoBool_resultTupleSchemeFactory();
+
+        public boolean success; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            SUCCESS((short)0, "success");
+
+            private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
             }
 
             /**
              * Find the _Fields constant that matches fieldId, or null if its not found.
              */
             public static _Fields findByThriftId(int fieldId) {
-                switch (fieldId) {
-                    case 1: // ARG
-                        return ARG;
+                switch(fieldId) {
+                    case 0: // SUCCESS
+                        return SUCCESS;
                     default:
                         return null;
                 }
@@ -888,51 +1523,52 @@ public static _Fields findByThriftId(int fieldId) {
              */
             public static _Fields findByThriftIdOrThrow(int fieldId) {
                 _Fields fields = findByThriftId(fieldId);
-                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
                 return fields;
             }
 
             /**
              * Find the _Fields constant that matches name, or null if its not found.
              */
-            public static _Fields findByName(String name) {
+            public static _Fields findByName(java.lang.String name) {
                 return byName.get(name);
             }
 
+            private final short _thriftId;
+            private final java.lang.String _fieldName;
+
+            _Fields(short thriftId, java.lang.String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
             public short getThriftFieldId() {
                 return _thriftId;
             }
 
-            public String getFieldName() {
+            public java.lang.String getFieldName() {
                 return _fieldName;
             }
         }
 
-    }
-
-    public static class echoBool_result implements org.apache.thrift.TBase<echoBool_result, echoBool_result._Fields>, java.io.Serializable, Cloneable {
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoBool_result");
-        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.BOOL, (short) 0);
         // isset id assignments
         private static final int __SUCCESS_ISSET_ID = 0;
-
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
         static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
             tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
-                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
+                                                                                      new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
             org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoBool_result.class, metaDataMap);
         }
 
-        public boolean success; // required
-        private BitSet __isset_bit_vector = new BitSet(1);
-
         public echoBool_result() {
         }
 
         public echoBool_result(
-                boolean success) {
+                boolean success)
+        {
             this();
             this.success = success;
             setSuccessIsSet(true);
@@ -942,8 +1578,7 @@ public echoBool_result(
          * Performs a deep copy on <i>other</i>.
          */
         public echoBool_result(echoBool_result other) {
-            __isset_bit_vector.clear();
-            __isset_bit_vector.or(other.__isset_bit_vector);
+            __isset_bitfield = other.__isset_bitfield;
             this.success = other.success;
         }
 
@@ -951,6 +1586,7 @@ public echoBool_result deepCopy() {
             return new echoBool_result(this);
         }
 
+        @Override
         public void clear() {
             setSuccessIsSet(false);
             this.success = false;
@@ -967,68 +1603,67 @@ public echoBool_result setSuccess(boolean success) {
         }
 
         public void unsetSuccess() {
-            __isset_bit_vector.clear(__SUCCESS_ISSET_ID);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
         }
 
-        /**
-         * Returns true if field success is set (has been assigned a value) and false otherwise
-         */
+        /** Returns true if field success is set (has been assigned a value) and false otherwise */
         public boolean isSetSuccess() {
-            return __isset_bit_vector.get(__SUCCESS_ISSET_ID);
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
         }
 
         public void setSuccessIsSet(boolean value) {
-            __isset_bit_vector.set(__SUCCESS_ISSET_ID, value);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
         }
 
-        public void setFieldValue(_Fields field, Object value) {
+        public void setFieldValue(_Fields field, java.lang.Object value) {
             switch (field) {
                 case SUCCESS:
                     if (value == null) {
                         unsetSuccess();
                     } else {
-                        setSuccess((Boolean) value);
+                        setSuccess((java.lang.Boolean)value);
                     }
                     break;
 
             }
         }
 
-        public Object getFieldValue(_Fields field) {
+        public java.lang.Object getFieldValue(_Fields field) {
             switch (field) {
                 case SUCCESS:
-                    return Boolean.valueOf(isSuccess());
+                    return isSuccess();
 
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        /**
-         * Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise
-         */
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
         public boolean isSet(_Fields field) {
             if (field == null) {
-                throw new IllegalArgumentException();
+                throw new java.lang.IllegalArgumentException();
             }
 
             switch (field) {
                 case SUCCESS:
                     return isSetSuccess();
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        public boolean equals(Object that) {
+        @Override
+        public boolean equals(java.lang.Object that) {
             if (that == null)
                 return false;
             if (that instanceof echoBool_result)
-                return this.equals((echoBool_result) that);
+                return this.equals((echoBool_result)that);
             return false;
         }
 
         public boolean equals(echoBool_result that) {
             if (that == null)
                 return false;
+            if (this == that)
+                return true;
 
             boolean this_present_success = true;
             boolean that_present_success = true;
@@ -1042,24 +1677,29 @@ public boolean equals(echoBool_result that) {
             return true;
         }
 
+        @Override
         public int hashCode() {
-            return 0;
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + ((success) ? 131071 : 524287);
+
+            return hashCode;
         }
 
+        @Override
         public int compareTo(echoBool_result other) {
             if (!getClass().equals(other.getClass())) {
                 return getClass().getName().compareTo(other.getClass().getName());
             }
 
             int lastComparison = 0;
-            echoBool_result typedOther = (echoBool_result) other;
 
-            lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(typedOther.isSetSuccess());
+            lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
             if (lastComparison != 0) {
                 return lastComparison;
             }
             if (isSetSuccess()) {
-                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, typedOther.success);
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
                 if (lastComparison != 0) {
                     return lastComparison;
                 }
@@ -1072,47 +1712,16 @@ public _Fields fieldForId(int fieldId) {
         }
 
         public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            org.apache.thrift.protocol.TField field;
-            iprot.readStructBegin();
-            while (true) {
-                field = iprot.readFieldBegin();
-                if (field.type == org.apache.thrift.protocol.TType.STOP) {
-                    break;
-                }
-                switch (field.id) {
-                    case 0: // SUCCESS
-                        if (field.type == org.apache.thrift.protocol.TType.BOOL) {
-                            this.success = iprot.readBool();
-                            setSuccessIsSet(true);
-                        } else {
-                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                        }
-                        break;
-                    default:
-                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                }
-                iprot.readFieldEnd();
-            }
-            iprot.readStructEnd();
-
-            // check for required fields of primitive type, which can't be checked in the validate method
-            validate();
+            scheme(iprot).read(iprot, this);
         }
 
         public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            oprot.writeStructBegin(STRUCT_DESC);
-
-            if (this.isSetSuccess()) {
-                oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
-                oprot.writeBool(this.success);
-                oprot.writeFieldEnd();
-            }
-            oprot.writeFieldStop();
-            oprot.writeStructEnd();
+            scheme(oprot).write(oprot, this);
         }
 
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echoBool_result(");
+        @Override
+        public java.lang.String toString() {
+            java.lang.StringBuilder sb = new java.lang.StringBuilder("echoBool_result(");
             boolean first = true;
 
             sb.append("success:");
@@ -1124,6 +1733,7 @@ public String toString() {
 
         public void validate() throws org.apache.thrift.TException {
             // check for required fields
+            // check for sub-struct validity
         }
 
         private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -1134,43 +1744,134 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
             }
         }
 
-        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
             try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
                 read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
             } catch (org.apache.thrift.TException te) {
                 throw new java.io.IOException(te);
             }
         }
 
-        /**
-         * The set of fields this struct contains, along with convenience methods for finding and manipulating them.
-         */
+        private static class echoBool_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoBool_resultStandardScheme getScheme() {
+                return new echoBool_resultStandardScheme();
+            }
+        }
+
+        private static class echoBool_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoBool_result> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoBool_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 0: // SUCCESS
+                            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+                                struct.success = iprot.readBool();
+                                struct.setSuccessIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoBool_result struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.isSetSuccess()) {
+                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+                    oprot.writeBool(struct.success);
+                    oprot.writeFieldEnd();
+                }
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoBool_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoBool_resultTupleScheme getScheme() {
+                return new echoBool_resultTupleScheme();
+            }
+        }
+
+        private static class echoBool_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoBool_result> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoBool_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet optionals = new java.util.BitSet();
+                if (struct.isSetSuccess()) {
+                    optionals.set(0);
+                }
+                oprot.writeBitSet(optionals, 1);
+                if (struct.isSetSuccess()) {
+                    oprot.writeBool(struct.success);
+                }
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoBool_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet incoming = iprot.readBitSet(1);
+                if (incoming.get(0)) {
+                    struct.success = iprot.readBool();
+                    struct.setSuccessIsSet(true);
+                }
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoByte_args implements org.apache.thrift.TBase<echoByte_args, echoByte_args._Fields>, java.io.Serializable, Cloneable, Comparable<echoByte_args>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoByte_args");
+
+        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.BYTE, (short)1);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoByte_argsStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoByte_argsTupleSchemeFactory();
+
+        public byte arg; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
         public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-            SUCCESS((short) 0, "success");
+            ARG((short)1, "arg");
 
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+            private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
             static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
                     byName.put(field.getFieldName(), field);
                 }
             }
 
-            private final short _thriftId;
-            private final String _fieldName;
-
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
-            }
-
             /**
              * Find the _Fields constant that matches fieldId, or null if its not found.
              */
             public static _Fields findByThriftId(int fieldId) {
-                switch (fieldId) {
-                    case 0: // SUCCESS
-                        return SUCCESS;
+                switch(fieldId) {
+                    case 1: // ARG
+                        return ARG;
                     default:
                         return null;
                 }
@@ -1182,51 +1883,52 @@ public static _Fields findByThriftId(int fieldId) {
              */
             public static _Fields findByThriftIdOrThrow(int fieldId) {
                 _Fields fields = findByThriftId(fieldId);
-                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
                 return fields;
             }
 
             /**
              * Find the _Fields constant that matches name, or null if its not found.
              */
-            public static _Fields findByName(String name) {
+            public static _Fields findByName(java.lang.String name) {
                 return byName.get(name);
             }
 
+            private final short _thriftId;
+            private final java.lang.String _fieldName;
+
+            _Fields(short thriftId, java.lang.String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
             public short getThriftFieldId() {
                 return _thriftId;
             }
 
-            public String getFieldName() {
+            public java.lang.String getFieldName() {
                 return _fieldName;
             }
         }
 
-    }
-
-    public static class echoByte_args implements org.apache.thrift.TBase<echoByte_args, echoByte_args._Fields>, java.io.Serializable, Cloneable {
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoByte_args");
-        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.BYTE, (short) 1);
         // isset id assignments
         private static final int __ARG_ISSET_ID = 0;
-
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
         static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
             tmpMap.put(_Fields.ARG, new org.apache.thrift.meta_data.FieldMetaData("arg", org.apache.thrift.TFieldRequirementType.REQUIRED,
-                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BYTE)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
+                                                                                  new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BYTE)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
             org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoByte_args.class, metaDataMap);
         }
 
-        public byte arg; // required
-        private BitSet __isset_bit_vector = new BitSet(1);
-
         public echoByte_args() {
         }
 
         public echoByte_args(
-                byte arg) {
+                byte arg)
+        {
             this();
             this.arg = arg;
             setArgIsSet(true);
@@ -1236,8 +1938,7 @@ public echoByte_args(
          * Performs a deep copy on <i>other</i>.
          */
         public echoByte_args(echoByte_args other) {
-            __isset_bit_vector.clear();
-            __isset_bit_vector.or(other.__isset_bit_vector);
+            __isset_bitfield = other.__isset_bitfield;
             this.arg = other.arg;
         }
 
@@ -1245,6 +1946,7 @@ public echoByte_args deepCopy() {
             return new echoByte_args(this);
         }
 
+        @Override
         public void clear() {
             setArgIsSet(false);
             this.arg = 0;
@@ -1261,68 +1963,67 @@ public echoByte_args setArg(byte arg) {
         }
 
         public void unsetArg() {
-            __isset_bit_vector.clear(__ARG_ISSET_ID);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __ARG_ISSET_ID);
         }
 
-        /**
-         * Returns true if field arg is set (has been assigned a value) and false otherwise
-         */
+        /** Returns true if field arg is set (has been assigned a value) and false otherwise */
         public boolean isSetArg() {
-            return __isset_bit_vector.get(__ARG_ISSET_ID);
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __ARG_ISSET_ID);
         }
 
         public void setArgIsSet(boolean value) {
-            __isset_bit_vector.set(__ARG_ISSET_ID, value);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __ARG_ISSET_ID, value);
         }
 
-        public void setFieldValue(_Fields field, Object value) {
+        public void setFieldValue(_Fields field, java.lang.Object value) {
             switch (field) {
                 case ARG:
                     if (value == null) {
                         unsetArg();
                     } else {
-                        setArg((Byte) value);
+                        setArg((java.lang.Byte)value);
                     }
                     break;
 
             }
         }
 
-        public Object getFieldValue(_Fields field) {
+        public java.lang.Object getFieldValue(_Fields field) {
             switch (field) {
                 case ARG:
-                    return Byte.valueOf(getArg());
+                    return getArg();
 
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        /**
-         * Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise
-         */
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
         public boolean isSet(_Fields field) {
             if (field == null) {
-                throw new IllegalArgumentException();
+                throw new java.lang.IllegalArgumentException();
             }
 
             switch (field) {
                 case ARG:
                     return isSetArg();
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        public boolean equals(Object that) {
+        @Override
+        public boolean equals(java.lang.Object that) {
             if (that == null)
                 return false;
             if (that instanceof echoByte_args)
-                return this.equals((echoByte_args) that);
+                return this.equals((echoByte_args)that);
             return false;
         }
 
         public boolean equals(echoByte_args that) {
             if (that == null)
                 return false;
+            if (this == that)
+                return true;
 
             boolean this_present_arg = true;
             boolean that_present_arg = true;
@@ -1336,24 +2037,29 @@ public boolean equals(echoByte_args that) {
             return true;
         }
 
+        @Override
         public int hashCode() {
-            return 0;
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + (int) (arg);
+
+            return hashCode;
         }
 
+        @Override
         public int compareTo(echoByte_args other) {
             if (!getClass().equals(other.getClass())) {
                 return getClass().getName().compareTo(other.getClass().getName());
             }
 
             int lastComparison = 0;
-            echoByte_args typedOther = (echoByte_args) other;
 
-            lastComparison = Boolean.valueOf(isSetArg()).compareTo(typedOther.isSetArg());
+            lastComparison = java.lang.Boolean.valueOf(isSetArg()).compareTo(other.isSetArg());
             if (lastComparison != 0) {
                 return lastComparison;
             }
             if (isSetArg()) {
-                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, typedOther.arg);
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, other.arg);
                 if (lastComparison != 0) {
                     return lastComparison;
                 }
@@ -1366,49 +2072,16 @@ public _Fields fieldForId(int fieldId) {
         }
 
         public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            org.apache.thrift.protocol.TField field;
-            iprot.readStructBegin();
-            while (true) {
-                field = iprot.readFieldBegin();
-                if (field.type == org.apache.thrift.protocol.TType.STOP) {
-                    break;
-                }
-                switch (field.id) {
-                    case 1: // ARG
-                        if (field.type == org.apache.thrift.protocol.TType.BYTE) {
-                            this.arg = iprot.readByte();
-                            setArgIsSet(true);
-                        } else {
-                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                        }
-                        break;
-                    default:
-                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                }
-                iprot.readFieldEnd();
-            }
-            iprot.readStructEnd();
-
-            // check for required fields of primitive type, which can't be checked in the validate method
-            if (!isSetArg()) {
-                throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
-            }
-            validate();
+            scheme(iprot).read(iprot, this);
         }
 
         public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            validate();
-
-            oprot.writeStructBegin(STRUCT_DESC);
-            oprot.writeFieldBegin(ARG_FIELD_DESC);
-            oprot.writeByte(this.arg);
-            oprot.writeFieldEnd();
-            oprot.writeFieldStop();
-            oprot.writeStructEnd();
+            scheme(oprot).write(oprot, this);
         }
 
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echoByte_args(");
+        @Override
+        public java.lang.String toString() {
+            java.lang.StringBuilder sb = new java.lang.StringBuilder("echoByte_args(");
             boolean first = true;
 
             sb.append("arg:");
@@ -1421,6 +2094,7 @@ public String toString() {
         public void validate() throws org.apache.thrift.TException {
             // check for required fields
             // alas, we cannot check 'arg' because it's a primitive and you chose the non-beans generator.
+            // check for sub-struct validity
         }
 
         private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -1431,45 +2105,125 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
             }
         }
 
-        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
             try {
                 // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
-                __isset_bit_vector = new BitSet(1);
+                __isset_bitfield = 0;
                 read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
             } catch (org.apache.thrift.TException te) {
                 throw new java.io.IOException(te);
             }
         }
 
-        /**
-         * The set of fields this struct contains, along with convenience methods for finding and manipulating them.
-         */
-        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-            ARG((short) 1, "arg");
+        private static class echoByte_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoByte_argsStandardScheme getScheme() {
+                return new echoByte_argsStandardScheme();
+            }
+        }
 
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+        private static class echoByte_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoByte_args> {
 
-            static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
-                    byName.put(field.getFieldName(), field);
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoByte_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 1: // ARG
+                            if (schemeField.type == org.apache.thrift.protocol.TType.BYTE) {
+                                struct.arg = iprot.readByte();
+                                struct.setArgIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                if (!struct.isSetArg()) {
+                    throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
                 }
+                struct.validate();
             }
 
-            private final short _thriftId;
-            private final String _fieldName;
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoByte_args struct) throws org.apache.thrift.TException {
+                struct.validate();
 
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
+                oprot.writeStructBegin(STRUCT_DESC);
+                oprot.writeFieldBegin(ARG_FIELD_DESC);
+                oprot.writeByte(struct.arg);
+                oprot.writeFieldEnd();
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoByte_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoByte_argsTupleScheme getScheme() {
+                return new echoByte_argsTupleScheme();
+            }
+        }
+
+        private static class echoByte_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoByte_args> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoByte_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                oprot.writeByte(struct.arg);
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoByte_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                struct.arg = iprot.readByte();
+                struct.setArgIsSet(true);
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoByte_result implements org.apache.thrift.TBase<echoByte_result, echoByte_result._Fields>, java.io.Serializable, Cloneable, Comparable<echoByte_result>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoByte_result");
+
+        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.BYTE, (short)0);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoByte_resultStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoByte_resultTupleSchemeFactory();
+
+        public byte success; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            SUCCESS((short)0, "success");
+
+            private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
             }
 
             /**
              * Find the _Fields constant that matches fieldId, or null if its not found.
              */
             public static _Fields findByThriftId(int fieldId) {
-                switch (fieldId) {
-                    case 1: // ARG
-                        return ARG;
+                switch(fieldId) {
+                    case 0: // SUCCESS
+                        return SUCCESS;
                     default:
                         return null;
                 }
@@ -1481,51 +2235,52 @@ public static _Fields findByThriftId(int fieldId) {
              */
             public static _Fields findByThriftIdOrThrow(int fieldId) {
                 _Fields fields = findByThriftId(fieldId);
-                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
                 return fields;
             }
 
             /**
              * Find the _Fields constant that matches name, or null if its not found.
              */
-            public static _Fields findByName(String name) {
+            public static _Fields findByName(java.lang.String name) {
                 return byName.get(name);
             }
 
+            private final short _thriftId;
+            private final java.lang.String _fieldName;
+
+            _Fields(short thriftId, java.lang.String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
             public short getThriftFieldId() {
                 return _thriftId;
             }
 
-            public String getFieldName() {
+            public java.lang.String getFieldName() {
                 return _fieldName;
             }
         }
 
-    }
-
-    public static class echoByte_result implements org.apache.thrift.TBase<echoByte_result, echoByte_result._Fields>, java.io.Serializable, Cloneable {
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoByte_result");
-        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.BYTE, (short) 0);
         // isset id assignments
         private static final int __SUCCESS_ISSET_ID = 0;
-
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
         static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
             tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
-                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BYTE)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
+                                                                                      new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BYTE)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
             org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoByte_result.class, metaDataMap);
         }
 
-        public byte success; // required
-        private BitSet __isset_bit_vector = new BitSet(1);
-
         public echoByte_result() {
         }
 
         public echoByte_result(
-                byte success) {
+                byte success)
+        {
             this();
             this.success = success;
             setSuccessIsSet(true);
@@ -1535,8 +2290,7 @@ public echoByte_result(
          * Performs a deep copy on <i>other</i>.
          */
         public echoByte_result(echoByte_result other) {
-            __isset_bit_vector.clear();
-            __isset_bit_vector.or(other.__isset_bit_vector);
+            __isset_bitfield = other.__isset_bitfield;
             this.success = other.success;
         }
 
@@ -1544,6 +2298,7 @@ public echoByte_result deepCopy() {
             return new echoByte_result(this);
         }
 
+        @Override
         public void clear() {
             setSuccessIsSet(false);
             this.success = 0;
@@ -1560,68 +2315,67 @@ public echoByte_result setSuccess(byte success) {
         }
 
         public void unsetSuccess() {
-            __isset_bit_vector.clear(__SUCCESS_ISSET_ID);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
         }
 
-        /**
-         * Returns true if field success is set (has been assigned a value) and false otherwise
-         */
+        /** Returns true if field success is set (has been assigned a value) and false otherwise */
         public boolean isSetSuccess() {
-            return __isset_bit_vector.get(__SUCCESS_ISSET_ID);
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
         }
 
         public void setSuccessIsSet(boolean value) {
-            __isset_bit_vector.set(__SUCCESS_ISSET_ID, value);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
         }
 
-        public void setFieldValue(_Fields field, Object value) {
+        public void setFieldValue(_Fields field, java.lang.Object value) {
             switch (field) {
                 case SUCCESS:
                     if (value == null) {
                         unsetSuccess();
                     } else {
-                        setSuccess((Byte) value);
+                        setSuccess((java.lang.Byte)value);
                     }
                     break;
 
             }
         }
 
-        public Object getFieldValue(_Fields field) {
+        public java.lang.Object getFieldValue(_Fields field) {
             switch (field) {
                 case SUCCESS:
-                    return Byte.valueOf(getSuccess());
+                    return getSuccess();
 
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        /**
-         * Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise
-         */
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
         public boolean isSet(_Fields field) {
             if (field == null) {
-                throw new IllegalArgumentException();
+                throw new java.lang.IllegalArgumentException();
             }
 
             switch (field) {
                 case SUCCESS:
                     return isSetSuccess();
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        public boolean equals(Object that) {
+        @Override
+        public boolean equals(java.lang.Object that) {
             if (that == null)
                 return false;
             if (that instanceof echoByte_result)
-                return this.equals((echoByte_result) that);
+                return this.equals((echoByte_result)that);
             return false;
         }
 
         public boolean equals(echoByte_result that) {
             if (that == null)
                 return false;
+            if (this == that)
+                return true;
 
             boolean this_present_success = true;
             boolean that_present_success = true;
@@ -1635,24 +2389,29 @@ public boolean equals(echoByte_result that) {
             return true;
         }
 
+        @Override
         public int hashCode() {
-            return 0;
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + (int) (success);
+
+            return hashCode;
         }
 
+        @Override
         public int compareTo(echoByte_result other) {
             if (!getClass().equals(other.getClass())) {
                 return getClass().getName().compareTo(other.getClass().getName());
             }
 
             int lastComparison = 0;
-            echoByte_result typedOther = (echoByte_result) other;
 
-            lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(typedOther.isSetSuccess());
+            lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
             if (lastComparison != 0) {
                 return lastComparison;
             }
             if (isSetSuccess()) {
-                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, typedOther.success);
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
                 if (lastComparison != 0) {
                     return lastComparison;
                 }
@@ -1665,47 +2424,16 @@ public _Fields fieldForId(int fieldId) {
         }
 
         public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            org.apache.thrift.protocol.TField field;
-            iprot.readStructBegin();
-            while (true) {
-                field = iprot.readFieldBegin();
-                if (field.type == org.apache.thrift.protocol.TType.STOP) {
-                    break;
-                }
-                switch (field.id) {
-                    case 0: // SUCCESS
-                        if (field.type == org.apache.thrift.protocol.TType.BYTE) {
-                            this.success = iprot.readByte();
-                            setSuccessIsSet(true);
-                        } else {
-                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                        }
-                        break;
-                    default:
-                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                }
-                iprot.readFieldEnd();
-            }
-            iprot.readStructEnd();
-
-            // check for required fields of primitive type, which can't be checked in the validate method
-            validate();
+            scheme(iprot).read(iprot, this);
         }
 
         public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            oprot.writeStructBegin(STRUCT_DESC);
-
-            if (this.isSetSuccess()) {
-                oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
-                oprot.writeByte(this.success);
-                oprot.writeFieldEnd();
-            }
-            oprot.writeFieldStop();
-            oprot.writeStructEnd();
+            scheme(oprot).write(oprot, this);
         }
 
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echoByte_result(");
+        @Override
+        public java.lang.String toString() {
+            java.lang.StringBuilder sb = new java.lang.StringBuilder("echoByte_result(");
             boolean first = true;
 
             sb.append("success:");
@@ -1717,6 +2445,7 @@ public String toString() {
 
         public void validate() throws org.apache.thrift.TException {
             // check for required fields
+            // check for sub-struct validity
         }
 
         private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -1727,43 +2456,134 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
             }
         }
 
-        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
             try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
                 read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
             } catch (org.apache.thrift.TException te) {
                 throw new java.io.IOException(te);
             }
         }
 
-        /**
-         * The set of fields this struct contains, along with convenience methods for finding and manipulating them.
-         */
-        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-            SUCCESS((short) 0, "success");
+        private static class echoByte_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoByte_resultStandardScheme getScheme() {
+                return new echoByte_resultStandardScheme();
+            }
+        }
 
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+        private static class echoByte_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoByte_result> {
 
-            static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
-                    byName.put(field.getFieldName(), field);
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoByte_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 0: // SUCCESS
+                            if (schemeField.type == org.apache.thrift.protocol.TType.BYTE) {
+                                struct.success = iprot.readByte();
+                                struct.setSuccessIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoByte_result struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.isSetSuccess()) {
+                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+                    oprot.writeByte(struct.success);
+                    oprot.writeFieldEnd();
                 }
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
             }
 
-            private final short _thriftId;
-            private final String _fieldName;
+        }
 
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
+        private static class echoByte_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoByte_resultTupleScheme getScheme() {
+                return new echoByte_resultTupleScheme();
+            }
+        }
+
+        private static class echoByte_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoByte_result> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoByte_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet optionals = new java.util.BitSet();
+                if (struct.isSetSuccess()) {
+                    optionals.set(0);
+                }
+                oprot.writeBitSet(optionals, 1);
+                if (struct.isSetSuccess()) {
+                    oprot.writeByte(struct.success);
+                }
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoByte_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet incoming = iprot.readBitSet(1);
+                if (incoming.get(0)) {
+                    struct.success = iprot.readByte();
+                    struct.setSuccessIsSet(true);
+                }
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoI16_args implements org.apache.thrift.TBase<echoI16_args, echoI16_args._Fields>, java.io.Serializable, Cloneable, Comparable<echoI16_args>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI16_args");
+
+        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.I16, (short)1);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoI16_argsStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoI16_argsTupleSchemeFactory();
+
+        public short arg; // required
+
+        /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+            ARG((short)1, "arg");
+
+            private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+            static {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                    byName.put(field.getFieldName(), field);
+                }
             }
 
             /**
              * Find the _Fields constant that matches fieldId, or null if its not found.
              */
             public static _Fields findByThriftId(int fieldId) {
-                switch (fieldId) {
-                    case 0: // SUCCESS
-                        return SUCCESS;
+                switch(fieldId) {
+                    case 1: // ARG
+                        return ARG;
                     default:
                         return null;
                 }
@@ -1775,51 +2595,52 @@ public static _Fields findByThriftId(int fieldId) {
              */
             public static _Fields findByThriftIdOrThrow(int fieldId) {
                 _Fields fields = findByThriftId(fieldId);
-                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
                 return fields;
             }
 
             /**
              * Find the _Fields constant that matches name, or null if its not found.
              */
-            public static _Fields findByName(String name) {
+            public static _Fields findByName(java.lang.String name) {
                 return byName.get(name);
             }
 
+            private final short _thriftId;
+            private final java.lang.String _fieldName;
+
+            _Fields(short thriftId, java.lang.String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
             public short getThriftFieldId() {
                 return _thriftId;
             }
 
-            public String getFieldName() {
+            public java.lang.String getFieldName() {
                 return _fieldName;
             }
         }
 
-    }
-
-    public static class echoI16_args implements org.apache.thrift.TBase<echoI16_args, echoI16_args._Fields>, java.io.Serializable, Cloneable {
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI16_args");
-        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.I16, (short) 1);
         // isset id assignments
         private static final int __ARG_ISSET_ID = 0;
-
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
         static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
             tmpMap.put(_Fields.ARG, new org.apache.thrift.meta_data.FieldMetaData("arg", org.apache.thrift.TFieldRequirementType.REQUIRED,
-                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I16)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
+                                                                                  new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I16)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
             org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoI16_args.class, metaDataMap);
         }
 
-        public short arg; // required
-        private BitSet __isset_bit_vector = new BitSet(1);
-
         public echoI16_args() {
         }
 
         public echoI16_args(
-                short arg) {
+                short arg)
+        {
             this();
             this.arg = arg;
             setArgIsSet(true);
@@ -1829,8 +2650,7 @@ public echoI16_args(
          * Performs a deep copy on <i>other</i>.
          */
         public echoI16_args(echoI16_args other) {
-            __isset_bit_vector.clear();
-            __isset_bit_vector.or(other.__isset_bit_vector);
+            __isset_bitfield = other.__isset_bitfield;
             this.arg = other.arg;
         }
 
@@ -1838,6 +2658,7 @@ public echoI16_args deepCopy() {
             return new echoI16_args(this);
         }
 
+        @Override
         public void clear() {
             setArgIsSet(false);
             this.arg = 0;
@@ -1854,68 +2675,67 @@ public echoI16_args setArg(short arg) {
         }
 
         public void unsetArg() {
-            __isset_bit_vector.clear(__ARG_ISSET_ID);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __ARG_ISSET_ID);
         }
 
-        /**
-         * Returns true if field arg is set (has been assigned a value) and false otherwise
-         */
+        /** Returns true if field arg is set (has been assigned a value) and false otherwise */
         public boolean isSetArg() {
-            return __isset_bit_vector.get(__ARG_ISSET_ID);
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __ARG_ISSET_ID);
         }
 
         public void setArgIsSet(boolean value) {
-            __isset_bit_vector.set(__ARG_ISSET_ID, value);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __ARG_ISSET_ID, value);
         }
 
-        public void setFieldValue(_Fields field, Object value) {
+        public void setFieldValue(_Fields field, java.lang.Object value) {
             switch (field) {
                 case ARG:
                     if (value == null) {
                         unsetArg();
                     } else {
-                        setArg((Short) value);
+                        setArg((java.lang.Short)value);
                     }
                     break;
 
             }
         }
 
-        public Object getFieldValue(_Fields field) {
+        public java.lang.Object getFieldValue(_Fields field) {
             switch (field) {
                 case ARG:
-                    return Short.valueOf(getArg());
+                    return getArg();
 
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        /**
-         * Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise
-         */
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
         public boolean isSet(_Fields field) {
             if (field == null) {
-                throw new IllegalArgumentException();
+                throw new java.lang.IllegalArgumentException();
             }
 
             switch (field) {
                 case ARG:
                     return isSetArg();
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        public boolean equals(Object that) {
+        @Override
+        public boolean equals(java.lang.Object that) {
             if (that == null)
                 return false;
             if (that instanceof echoI16_args)
-                return this.equals((echoI16_args) that);
+                return this.equals((echoI16_args)that);
             return false;
         }
 
         public boolean equals(echoI16_args that) {
             if (that == null)
                 return false;
+            if (this == that)
+                return true;
 
             boolean this_present_arg = true;
             boolean that_present_arg = true;
@@ -1929,24 +2749,29 @@ public boolean equals(echoI16_args that) {
             return true;
         }
 
+        @Override
         public int hashCode() {
-            return 0;
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + arg;
+
+            return hashCode;
         }
 
+        @Override
         public int compareTo(echoI16_args other) {
             if (!getClass().equals(other.getClass())) {
                 return getClass().getName().compareTo(other.getClass().getName());
             }
 
             int lastComparison = 0;
-            echoI16_args typedOther = (echoI16_args) other;
 
-            lastComparison = Boolean.valueOf(isSetArg()).compareTo(typedOther.isSetArg());
+            lastComparison = java.lang.Boolean.valueOf(isSetArg()).compareTo(other.isSetArg());
             if (lastComparison != 0) {
                 return lastComparison;
             }
             if (isSetArg()) {
-                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, typedOther.arg);
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, other.arg);
                 if (lastComparison != 0) {
                     return lastComparison;
                 }
@@ -1959,49 +2784,16 @@ public _Fields fieldForId(int fieldId) {
         }
 
         public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            org.apache.thrift.protocol.TField field;
-            iprot.readStructBegin();
-            while (true) {
-                field = iprot.readFieldBegin();
-                if (field.type == org.apache.thrift.protocol.TType.STOP) {
-                    break;
-                }
-                switch (field.id) {
-                    case 1: // ARG
-                        if (field.type == org.apache.thrift.protocol.TType.I16) {
-                            this.arg = iprot.readI16();
-                            setArgIsSet(true);
-                        } else {
-                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                        }
-                        break;
-                    default:
-                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                }
-                iprot.readFieldEnd();
-            }
-            iprot.readStructEnd();
-
-            // check for required fields of primitive type, which can't be checked in the validate method
-            if (!isSetArg()) {
-                throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
-            }
-            validate();
+            scheme(iprot).read(iprot, this);
         }
 
         public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            validate();
-
-            oprot.writeStructBegin(STRUCT_DESC);
-            oprot.writeFieldBegin(ARG_FIELD_DESC);
-            oprot.writeI16(this.arg);
-            oprot.writeFieldEnd();
-            oprot.writeFieldStop();
-            oprot.writeStructEnd();
+            scheme(oprot).write(oprot, this);
         }
 
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echoI16_args(");
+        @Override
+        public java.lang.String toString() {
+            java.lang.StringBuilder sb = new java.lang.StringBuilder("echoI16_args(");
             boolean first = true;
 
             sb.append("arg:");
@@ -2014,53 +2806,136 @@ public String toString() {
         public void validate() throws org.apache.thrift.TException {
             // check for required fields
             // alas, we cannot check 'arg' because it's a primitive and you chose the non-beans generator.
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+            try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoI16_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI16_argsStandardScheme getScheme() {
+                return new echoI16_argsStandardScheme();
+            }
+        }
+
+        private static class echoI16_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoI16_args> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoI16_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 1: // ARG
+                            if (schemeField.type == org.apache.thrift.protocol.TType.I16) {
+                                struct.arg = iprot.readI16();
+                                struct.setArgIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                if (!struct.isSetArg()) {
+                    throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
+                }
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoI16_args struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                oprot.writeFieldBegin(ARG_FIELD_DESC);
+                oprot.writeI16(struct.arg);
+                oprot.writeFieldEnd();
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoI16_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI16_argsTupleScheme getScheme() {
+                return new echoI16_argsTupleScheme();
+            }
         }
 
-        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
-            try {
-                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
-            } catch (org.apache.thrift.TException te) {
-                throw new java.io.IOException(te);
+        private static class echoI16_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoI16_args> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoI16_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                oprot.writeI16(struct.arg);
             }
-        }
 
-        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
-            try {
-                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
-                __isset_bit_vector = new BitSet(1);
-                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
-            } catch (org.apache.thrift.TException te) {
-                throw new java.io.IOException(te);
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoI16_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                struct.arg = iprot.readI16();
+                struct.setArgIsSet(true);
             }
         }
 
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoI16_result implements org.apache.thrift.TBase<echoI16_result, echoI16_result._Fields>, java.io.Serializable, Cloneable, Comparable<echoI16_result>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI16_result");
+
+        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.I16, (short)0);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoI16_resultStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoI16_resultTupleSchemeFactory();
+
+        public short success; // required
+
         /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
         public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-            ARG((short) 1, "arg");
+            SUCCESS((short)0, "success");
 
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+            private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
             static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
                     byName.put(field.getFieldName(), field);
                 }
             }
 
-            private final short _thriftId;
-            private final String _fieldName;
-
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
-            }
-
             /**
              * Find the _Fields constant that matches fieldId, or null if its not found.
              */
             public static _Fields findByThriftId(int fieldId) {
-                switch (fieldId) {
-                    case 1: // ARG
-                        return ARG;
+                switch(fieldId) {
+                    case 0: // SUCCESS
+                        return SUCCESS;
                     default:
                         return null;
                 }
@@ -2072,51 +2947,52 @@ public static _Fields findByThriftId(int fieldId) {
              */
             public static _Fields findByThriftIdOrThrow(int fieldId) {
                 _Fields fields = findByThriftId(fieldId);
-                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
                 return fields;
             }
 
             /**
              * Find the _Fields constant that matches name, or null if its not found.
              */
-            public static _Fields findByName(String name) {
+            public static _Fields findByName(java.lang.String name) {
                 return byName.get(name);
             }
 
+            private final short _thriftId;
+            private final java.lang.String _fieldName;
+
+            _Fields(short thriftId, java.lang.String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
             public short getThriftFieldId() {
                 return _thriftId;
             }
 
-            public String getFieldName() {
+            public java.lang.String getFieldName() {
                 return _fieldName;
             }
         }
 
-    }
-
-    public static class echoI16_result implements org.apache.thrift.TBase<echoI16_result, echoI16_result._Fields>, java.io.Serializable, Cloneable {
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI16_result");
-        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.I16, (short) 0);
         // isset id assignments
         private static final int __SUCCESS_ISSET_ID = 0;
-
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
         static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
             tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
-                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I16)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
+                                                                                      new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I16)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
             org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoI16_result.class, metaDataMap);
         }
 
-        public short success; // required
-        private BitSet __isset_bit_vector = new BitSet(1);
-
         public echoI16_result() {
         }
 
         public echoI16_result(
-                short success) {
+                short success)
+        {
             this();
             this.success = success;
             setSuccessIsSet(true);
@@ -2126,8 +3002,7 @@ public echoI16_result(
          * Performs a deep copy on <i>other</i>.
          */
         public echoI16_result(echoI16_result other) {
-            __isset_bit_vector.clear();
-            __isset_bit_vector.or(other.__isset_bit_vector);
+            __isset_bitfield = other.__isset_bitfield;
             this.success = other.success;
         }
 
@@ -2135,6 +3010,7 @@ public echoI16_result deepCopy() {
             return new echoI16_result(this);
         }
 
+        @Override
         public void clear() {
             setSuccessIsSet(false);
             this.success = 0;
@@ -2151,66 +3027,67 @@ public echoI16_result setSuccess(short success) {
         }
 
         public void unsetSuccess() {
-            __isset_bit_vector.clear(__SUCCESS_ISSET_ID);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
         }
 
         /** Returns true if field success is set (has been assigned a value) and false otherwise */
         public boolean isSetSuccess() {
-            return __isset_bit_vector.get(__SUCCESS_ISSET_ID);
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
         }
 
         public void setSuccessIsSet(boolean value) {
-            __isset_bit_vector.set(__SUCCESS_ISSET_ID, value);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
         }
 
-        public void setFieldValue(_Fields field, Object value) {
+        public void setFieldValue(_Fields field, java.lang.Object value) {
             switch (field) {
                 case SUCCESS:
                     if (value == null) {
                         unsetSuccess();
                     } else {
-                        setSuccess((Short) value);
+                        setSuccess((java.lang.Short)value);
                     }
                     break;
 
             }
         }
 
-        public Object getFieldValue(_Fields field) {
+        public java.lang.Object getFieldValue(_Fields field) {
             switch (field) {
                 case SUCCESS:
-                    return Short.valueOf(getSuccess());
+                    return getSuccess();
 
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        /**
-         * Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise
-         */
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
         public boolean isSet(_Fields field) {
             if (field == null) {
-                throw new IllegalArgumentException();
+                throw new java.lang.IllegalArgumentException();
             }
 
             switch (field) {
                 case SUCCESS:
                     return isSetSuccess();
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        public boolean equals(Object that) {
+        @Override
+        public boolean equals(java.lang.Object that) {
             if (that == null)
                 return false;
             if (that instanceof echoI16_result)
-                return this.equals((echoI16_result) that);
+                return this.equals((echoI16_result)that);
             return false;
         }
 
         public boolean equals(echoI16_result that) {
             if (that == null)
                 return false;
+            if (this == that)
+                return true;
 
             boolean this_present_success = true;
             boolean that_present_success = true;
@@ -2224,24 +3101,29 @@ public boolean equals(echoI16_result that) {
             return true;
         }
 
+        @Override
         public int hashCode() {
-            return 0;
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + success;
+
+            return hashCode;
         }
 
+        @Override
         public int compareTo(echoI16_result other) {
             if (!getClass().equals(other.getClass())) {
                 return getClass().getName().compareTo(other.getClass().getName());
             }
 
             int lastComparison = 0;
-            echoI16_result typedOther = (echoI16_result) other;
 
-            lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(typedOther.isSetSuccess());
+            lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
             if (lastComparison != 0) {
                 return lastComparison;
             }
             if (isSetSuccess()) {
-                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, typedOther.success);
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
                 if (lastComparison != 0) {
                     return lastComparison;
                 }
@@ -2254,47 +3136,16 @@ public _Fields fieldForId(int fieldId) {
         }
 
         public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            org.apache.thrift.protocol.TField field;
-            iprot.readStructBegin();
-            while (true) {
-                field = iprot.readFieldBegin();
-                if (field.type == org.apache.thrift.protocol.TType.STOP) {
-                    break;
-                }
-                switch (field.id) {
-                    case 0: // SUCCESS
-                        if (field.type == org.apache.thrift.protocol.TType.I16) {
-                            this.success = iprot.readI16();
-                            setSuccessIsSet(true);
-                        } else {
-                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                        }
-                        break;
-                    default:
-                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                }
-                iprot.readFieldEnd();
-            }
-            iprot.readStructEnd();
-
-            // check for required fields of primitive type, which can't be checked in the validate method
-            validate();
+            scheme(iprot).read(iprot, this);
         }
 
         public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            oprot.writeStructBegin(STRUCT_DESC);
-
-            if (this.isSetSuccess()) {
-                oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
-                oprot.writeI16(this.success);
-                oprot.writeFieldEnd();
-            }
-            oprot.writeFieldStop();
-            oprot.writeStructEnd();
+            scheme(oprot).write(oprot, this);
         }
 
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echoI16_result(");
+        @Override
+        public java.lang.String toString() {
+            java.lang.StringBuilder sb = new java.lang.StringBuilder("echoI16_result(");
             boolean first = true;
 
             sb.append("success:");
@@ -2306,6 +3157,7 @@ public String toString() {
 
         public void validate() throws org.apache.thrift.TException {
             // check for required fields
+            // check for sub-struct validity
         }
 
         private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -2316,41 +3168,134 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
             }
         }
 
-        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
             try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
                 read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
             } catch (org.apache.thrift.TException te) {
                 throw new java.io.IOException(te);
             }
         }
 
+        private static class echoI16_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI16_resultStandardScheme getScheme() {
+                return new echoI16_resultStandardScheme();
+            }
+        }
+
+        private static class echoI16_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoI16_result> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoI16_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 0: // SUCCESS
+                            if (schemeField.type == org.apache.thrift.protocol.TType.I16) {
+                                struct.success = iprot.readI16();
+                                struct.setSuccessIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoI16_result struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.isSetSuccess()) {
+                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+                    oprot.writeI16(struct.success);
+                    oprot.writeFieldEnd();
+                }
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoI16_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI16_resultTupleScheme getScheme() {
+                return new echoI16_resultTupleScheme();
+            }
+        }
+
+        private static class echoI16_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoI16_result> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoI16_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet optionals = new java.util.BitSet();
+                if (struct.isSetSuccess()) {
+                    optionals.set(0);
+                }
+                oprot.writeBitSet(optionals, 1);
+                if (struct.isSetSuccess()) {
+                    oprot.writeI16(struct.success);
+                }
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoI16_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet incoming = iprot.readBitSet(1);
+                if (incoming.get(0)) {
+                    struct.success = iprot.readI16();
+                    struct.setSuccessIsSet(true);
+                }
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoI32_args implements org.apache.thrift.TBase<echoI32_args, echoI32_args._Fields>, java.io.Serializable, Cloneable, Comparable<echoI32_args>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI32_args");
+
+        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.I32, (short)1);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoI32_argsStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoI32_argsTupleSchemeFactory();
+
+        public int arg; // required
+
         /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
         public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-            SUCCESS((short) 0, "success");
+            ARG((short)1, "arg");
 
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+            private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
             static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
                     byName.put(field.getFieldName(), field);
                 }
             }
 
-            private final short _thriftId;
-            private final String _fieldName;
-
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
-            }
-
             /**
              * Find the _Fields constant that matches fieldId, or null if its not found.
              */
             public static _Fields findByThriftId(int fieldId) {
-                switch (fieldId) {
-                    case 0: // SUCCESS
-                        return SUCCESS;
+                switch(fieldId) {
+                    case 1: // ARG
+                        return ARG;
                     default:
                         return null;
                 }
@@ -2362,51 +3307,52 @@ public static _Fields findByThriftId(int fieldId) {
              */
             public static _Fields findByThriftIdOrThrow(int fieldId) {
                 _Fields fields = findByThriftId(fieldId);
-                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
                 return fields;
             }
 
             /**
              * Find the _Fields constant that matches name, or null if its not found.
              */
-            public static _Fields findByName(String name) {
+            public static _Fields findByName(java.lang.String name) {
                 return byName.get(name);
             }
 
+            private final short _thriftId;
+            private final java.lang.String _fieldName;
+
+            _Fields(short thriftId, java.lang.String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
             public short getThriftFieldId() {
                 return _thriftId;
             }
 
-            public String getFieldName() {
+            public java.lang.String getFieldName() {
                 return _fieldName;
             }
         }
 
-    }
-
-    public static class echoI32_args implements org.apache.thrift.TBase<echoI32_args, echoI32_args._Fields>, java.io.Serializable, Cloneable {
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI32_args");
-        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.I32, (short) 1);
         // isset id assignments
         private static final int __ARG_ISSET_ID = 0;
-
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
         static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
             tmpMap.put(_Fields.ARG, new org.apache.thrift.meta_data.FieldMetaData("arg", org.apache.thrift.TFieldRequirementType.REQUIRED,
-                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
+                                                                                  new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
             org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoI32_args.class, metaDataMap);
         }
 
-        public int arg; // required
-        private BitSet __isset_bit_vector = new BitSet(1);
-
         public echoI32_args() {
         }
 
         public echoI32_args(
-                int arg) {
+                int arg)
+        {
             this();
             this.arg = arg;
             setArgIsSet(true);
@@ -2416,8 +3362,7 @@ public echoI32_args(
          * Performs a deep copy on <i>other</i>.
          */
         public echoI32_args(echoI32_args other) {
-            __isset_bit_vector.clear();
-            __isset_bit_vector.or(other.__isset_bit_vector);
+            __isset_bitfield = other.__isset_bitfield;
             this.arg = other.arg;
         }
 
@@ -2425,6 +3370,7 @@ public echoI32_args deepCopy() {
             return new echoI32_args(this);
         }
 
+        @Override
         public void clear() {
             setArgIsSet(false);
             this.arg = 0;
@@ -2441,66 +3387,67 @@ public echoI32_args setArg(int arg) {
         }
 
         public void unsetArg() {
-            __isset_bit_vector.clear(__ARG_ISSET_ID);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __ARG_ISSET_ID);
         }
 
         /** Returns true if field arg is set (has been assigned a value) and false otherwise */
         public boolean isSetArg() {
-            return __isset_bit_vector.get(__ARG_ISSET_ID);
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __ARG_ISSET_ID);
         }
 
         public void setArgIsSet(boolean value) {
-            __isset_bit_vector.set(__ARG_ISSET_ID, value);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __ARG_ISSET_ID, value);
         }
 
-        public void setFieldValue(_Fields field, Object value) {
+        public void setFieldValue(_Fields field, java.lang.Object value) {
             switch (field) {
                 case ARG:
                     if (value == null) {
                         unsetArg();
                     } else {
-                        setArg((Integer) value);
+                        setArg((java.lang.Integer)value);
                     }
                     break;
 
             }
         }
 
-        public Object getFieldValue(_Fields field) {
+        public java.lang.Object getFieldValue(_Fields field) {
             switch (field) {
                 case ARG:
-                    return Integer.valueOf(getArg());
+                    return getArg();
 
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        /**
-         * Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise
-         */
+        /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
         public boolean isSet(_Fields field) {
             if (field == null) {
-                throw new IllegalArgumentException();
+                throw new java.lang.IllegalArgumentException();
             }
 
             switch (field) {
                 case ARG:
                     return isSetArg();
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        public boolean equals(Object that) {
+        @Override
+        public boolean equals(java.lang.Object that) {
             if (that == null)
                 return false;
             if (that instanceof echoI32_args)
-                return this.equals((echoI32_args) that);
+                return this.equals((echoI32_args)that);
             return false;
         }
 
         public boolean equals(echoI32_args that) {
             if (that == null)
                 return false;
+            if (this == that)
+                return true;
 
             boolean this_present_arg = true;
             boolean that_present_arg = true;
@@ -2514,24 +3461,29 @@ public boolean equals(echoI32_args that) {
             return true;
         }
 
+        @Override
         public int hashCode() {
-            return 0;
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + arg;
+
+            return hashCode;
         }
 
+        @Override
         public int compareTo(echoI32_args other) {
             if (!getClass().equals(other.getClass())) {
                 return getClass().getName().compareTo(other.getClass().getName());
             }
 
             int lastComparison = 0;
-            echoI32_args typedOther = (echoI32_args) other;
 
-            lastComparison = Boolean.valueOf(isSetArg()).compareTo(typedOther.isSetArg());
+            lastComparison = java.lang.Boolean.valueOf(isSetArg()).compareTo(other.isSetArg());
             if (lastComparison != 0) {
                 return lastComparison;
             }
             if (isSetArg()) {
-                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, typedOther.arg);
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, other.arg);
                 if (lastComparison != 0) {
                     return lastComparison;
                 }
@@ -2544,49 +3496,16 @@ public _Fields fieldForId(int fieldId) {
         }
 
         public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            org.apache.thrift.protocol.TField field;
-            iprot.readStructBegin();
-            while (true) {
-                field = iprot.readFieldBegin();
-                if (field.type == org.apache.thrift.protocol.TType.STOP) {
-                    break;
-                }
-                switch (field.id) {
-                    case 1: // ARG
-                        if (field.type == org.apache.thrift.protocol.TType.I32) {
-                            this.arg = iprot.readI32();
-                            setArgIsSet(true);
-                        } else {
-                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                        }
-                        break;
-                    default:
-                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                }
-                iprot.readFieldEnd();
-            }
-            iprot.readStructEnd();
-
-            // check for required fields of primitive type, which can't be checked in the validate method
-            if (!isSetArg()) {
-                throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
-            }
-            validate();
+            scheme(iprot).read(iprot, this);
         }
 
         public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            validate();
-
-            oprot.writeStructBegin(STRUCT_DESC);
-            oprot.writeFieldBegin(ARG_FIELD_DESC);
-            oprot.writeI32(this.arg);
-            oprot.writeFieldEnd();
-            oprot.writeFieldStop();
-            oprot.writeStructEnd();
+            scheme(oprot).write(oprot, this);
         }
 
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echoI32_args(");
+        @Override
+        public java.lang.String toString() {
+            java.lang.StringBuilder sb = new java.lang.StringBuilder("echoI32_args(");
             boolean first = true;
 
             sb.append("arg:");
@@ -2599,6 +3518,7 @@ public String toString() {
         public void validate() throws org.apache.thrift.TException {
             // check for required fields
             // alas, we cannot check 'arg' because it's a primitive and you chose the non-beans generator.
+            // check for sub-struct validity
         }
 
         private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -2609,43 +3529,125 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
             }
         }
 
-        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
             try {
                 // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
-                __isset_bit_vector = new BitSet(1);
+                __isset_bitfield = 0;
                 read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
             } catch (org.apache.thrift.TException te) {
                 throw new java.io.IOException(te);
             }
         }
 
+        private static class echoI32_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI32_argsStandardScheme getScheme() {
+                return new echoI32_argsStandardScheme();
+            }
+        }
+
+        private static class echoI32_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoI32_args> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoI32_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 1: // ARG
+                            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+                                struct.arg = iprot.readI32();
+                                struct.setArgIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                if (!struct.isSetArg()) {
+                    throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
+                }
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoI32_args struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                oprot.writeFieldBegin(ARG_FIELD_DESC);
+                oprot.writeI32(struct.arg);
+                oprot.writeFieldEnd();
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoI32_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI32_argsTupleScheme getScheme() {
+                return new echoI32_argsTupleScheme();
+            }
+        }
+
+        private static class echoI32_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoI32_args> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoI32_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                oprot.writeI32(struct.arg);
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoI32_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                struct.arg = iprot.readI32();
+                struct.setArgIsSet(true);
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoI32_result implements org.apache.thrift.TBase<echoI32_result, echoI32_result._Fields>, java.io.Serializable, Cloneable, Comparable<echoI32_result>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI32_result");
+
+        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.I32, (short)0);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoI32_resultStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoI32_resultTupleSchemeFactory();
+
+        public int success; // required
+
         /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
         public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-            ARG((short) 1, "arg");
+            SUCCESS((short)0, "success");
 
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+            private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
             static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
                     byName.put(field.getFieldName(), field);
                 }
             }
 
-            private final short _thriftId;
-            private final String _fieldName;
-
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
-            }
-
             /**
              * Find the _Fields constant that matches fieldId, or null if its not found.
              */
             public static _Fields findByThriftId(int fieldId) {
-                switch (fieldId) {
-                    case 1: // ARG
-                        return ARG;
+                switch(fieldId) {
+                    case 0: // SUCCESS
+                        return SUCCESS;
                     default:
                         return null;
                 }
@@ -2657,51 +3659,52 @@ public static _Fields findByThriftId(int fieldId) {
              */
             public static _Fields findByThriftIdOrThrow(int fieldId) {
                 _Fields fields = findByThriftId(fieldId);
-                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
                 return fields;
             }
 
             /**
              * Find the _Fields constant that matches name, or null if its not found.
              */
-            public static _Fields findByName(String name) {
+            public static _Fields findByName(java.lang.String name) {
                 return byName.get(name);
             }
 
+            private final short _thriftId;
+            private final java.lang.String _fieldName;
+
+            _Fields(short thriftId, java.lang.String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
             public short getThriftFieldId() {
                 return _thriftId;
             }
 
-            public String getFieldName() {
+            public java.lang.String getFieldName() {
                 return _fieldName;
             }
         }
 
-    }
-
-    public static class echoI32_result implements org.apache.thrift.TBase<echoI32_result, echoI32_result._Fields>, java.io.Serializable, Cloneable {
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI32_result");
-        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.I32, (short) 0);
         // isset id assignments
         private static final int __SUCCESS_ISSET_ID = 0;
-
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
         static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
             tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
-                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
+                                                                                      new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
             org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoI32_result.class, metaDataMap);
         }
 
-        public int success; // required
-        private BitSet __isset_bit_vector = new BitSet(1);
-
         public echoI32_result() {
         }
 
         public echoI32_result(
-                int success) {
+                int success)
+        {
             this();
             this.success = success;
             setSuccessIsSet(true);
@@ -2711,8 +3714,7 @@ public echoI32_result(
          * Performs a deep copy on <i>other</i>.
          */
         public echoI32_result(echoI32_result other) {
-            __isset_bit_vector.clear();
-            __isset_bit_vector.or(other.__isset_bit_vector);
+            __isset_bitfield = other.__isset_bitfield;
             this.success = other.success;
         }
 
@@ -2720,6 +3722,7 @@ public echoI32_result deepCopy() {
             return new echoI32_result(this);
         }
 
+        @Override
         public void clear() {
             setSuccessIsSet(false);
             this.success = 0;
@@ -2736,64 +3739,67 @@ public echoI32_result setSuccess(int success) {
         }
 
         public void unsetSuccess() {
-            __isset_bit_vector.clear(__SUCCESS_ISSET_ID);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
         }
 
         /** Returns true if field success is set (has been assigned a value) and false otherwise */
         public boolean isSetSuccess() {
-            return __isset_bit_vector.get(__SUCCESS_ISSET_ID);
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
         }
 
         public void setSuccessIsSet(boolean value) {
-            __isset_bit_vector.set(__SUCCESS_ISSET_ID, value);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
         }
 
-        public void setFieldValue(_Fields field, Object value) {
+        public void setFieldValue(_Fields field, java.lang.Object value) {
             switch (field) {
                 case SUCCESS:
                     if (value == null) {
                         unsetSuccess();
                     } else {
-                        setSuccess((Integer) value);
+                        setSuccess((java.lang.Integer)value);
                     }
                     break;
 
             }
         }
 
-        public Object getFieldValue(_Fields field) {
+        public java.lang.Object getFieldValue(_Fields field) {
             switch (field) {
                 case SUCCESS:
-                    return Integer.valueOf(getSuccess());
+                    return getSuccess();
 
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
         /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
         public boolean isSet(_Fields field) {
             if (field == null) {
-                throw new IllegalArgumentException();
+                throw new java.lang.IllegalArgumentException();
             }
 
             switch (field) {
                 case SUCCESS:
                     return isSetSuccess();
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        public boolean equals(Object that) {
+        @Override
+        public boolean equals(java.lang.Object that) {
             if (that == null)
                 return false;
             if (that instanceof echoI32_result)
-                return this.equals((echoI32_result) that);
+                return this.equals((echoI32_result)that);
             return false;
         }
 
         public boolean equals(echoI32_result that) {
             if (that == null)
                 return false;
+            if (this == that)
+                return true;
 
             boolean this_present_success = true;
             boolean that_present_success = true;
@@ -2807,24 +3813,29 @@ public boolean equals(echoI32_result that) {
             return true;
         }
 
+        @Override
         public int hashCode() {
-            return 0;
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + success;
+
+            return hashCode;
         }
 
+        @Override
         public int compareTo(echoI32_result other) {
             if (!getClass().equals(other.getClass())) {
                 return getClass().getName().compareTo(other.getClass().getName());
             }
 
             int lastComparison = 0;
-            echoI32_result typedOther = (echoI32_result) other;
 
-            lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(typedOther.isSetSuccess());
+            lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
             if (lastComparison != 0) {
                 return lastComparison;
             }
             if (isSetSuccess()) {
-                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, typedOther.success);
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
                 if (lastComparison != 0) {
                     return lastComparison;
                 }
@@ -2837,103 +3848,166 @@ public _Fields fieldForId(int fieldId) {
         }
 
         public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            org.apache.thrift.protocol.TField field;
-            iprot.readStructBegin();
-            while (true) {
-                field = iprot.readFieldBegin();
-                if (field.type == org.apache.thrift.protocol.TType.STOP) {
-                    break;
-                }
-                switch (field.id) {
-                    case 0: // SUCCESS
-                        if (field.type == org.apache.thrift.protocol.TType.I32) {
-                            this.success = iprot.readI32();
-                            setSuccessIsSet(true);
-                        } else {
-                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                        }
+            scheme(iprot).read(iprot, this);
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+            scheme(oprot).write(oprot, this);
+        }
+
+        @Override
+        public java.lang.String toString() {
+            java.lang.StringBuilder sb = new java.lang.StringBuilder("echoI32_result(");
+            boolean first = true;
+
+            sb.append("success:");
+            sb.append(this.success);
+            first = false;
+            sb.append(")");
+            return sb.toString();
+        }
+
+        public void validate() throws org.apache.thrift.TException {
+            // check for required fields
+            // check for sub-struct validity
+        }
+
+        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+            try {
+                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+            try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoI32_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI32_resultStandardScheme getScheme() {
+                return new echoI32_resultStandardScheme();
+            }
+        }
+
+        private static class echoI32_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoI32_result> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoI32_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
                         break;
-                    default:
-                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
+                    }
+                    switch (schemeField.id) {
+                        case 0: // SUCCESS
+                            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+                                struct.success = iprot.readI32();
+                                struct.setSuccessIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoI32_result struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.isSetSuccess()) {
+                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+                    oprot.writeI32(struct.success);
+                    oprot.writeFieldEnd();
                 }
-                iprot.readFieldEnd();
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
             }
-            iprot.readStructEnd();
 
-            // check for required fields of primitive type, which can't be checked in the validate method
-            validate();
         }
 
-        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            oprot.writeStructBegin(STRUCT_DESC);
-
-            if (this.isSetSuccess()) {
-                oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
-                oprot.writeI32(this.success);
-                oprot.writeFieldEnd();
+        private static class echoI32_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI32_resultTupleScheme getScheme() {
+                return new echoI32_resultTupleScheme();
             }
-            oprot.writeFieldStop();
-            oprot.writeStructEnd();
         }
 
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echoI32_result(");
-            boolean first = true;
-
-            sb.append("success:");
-            sb.append(this.success);
-            first = false;
-            sb.append(")");
-            return sb.toString();
-        }
+        private static class echoI32_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoI32_result> {
 
-        public void validate() throws org.apache.thrift.TException {
-            // check for required fields
-        }
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoI32_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet optionals = new java.util.BitSet();
+                if (struct.isSetSuccess()) {
+                    optionals.set(0);
+                }
+                oprot.writeBitSet(optionals, 1);
+                if (struct.isSetSuccess()) {
+                    oprot.writeI32(struct.success);
+                }
+            }
 
-        private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
-            try {
-                write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
-            } catch (org.apache.thrift.TException te) {
-                throw new java.io.IOException(te);
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoI32_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet incoming = iprot.readBitSet(1);
+                if (incoming.get(0)) {
+                    struct.success = iprot.readI32();
+                    struct.setSuccessIsSet(true);
+                }
             }
         }
 
-        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
-            try {
-                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
-            } catch (org.apache.thrift.TException te) {
-                throw new java.io.IOException(te);
-            }
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
         }
+    }
+
+    public static class echoI64_args implements org.apache.thrift.TBase<echoI64_args, echoI64_args._Fields>, java.io.Serializable, Cloneable, Comparable<echoI64_args>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI64_args");
+
+        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.I64, (short)1);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoI64_argsStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoI64_argsTupleSchemeFactory();
+
+        public long arg; // required
 
         /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
         public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-            SUCCESS((short) 0, "success");
+            ARG((short)1, "arg");
 
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+            private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
             static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
                     byName.put(field.getFieldName(), field);
                 }
             }
 
-            private final short _thriftId;
-            private final String _fieldName;
-
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
-            }
-
             /**
              * Find the _Fields constant that matches fieldId, or null if its not found.
              */
             public static _Fields findByThriftId(int fieldId) {
-                switch (fieldId) {
-                    case 0: // SUCCESS
-                        return SUCCESS;
+                switch(fieldId) {
+                    case 1: // ARG
+                        return ARG;
                     default:
                         return null;
                 }
@@ -2945,51 +4019,52 @@ public static _Fields findByThriftId(int fieldId) {
              */
             public static _Fields findByThriftIdOrThrow(int fieldId) {
                 _Fields fields = findByThriftId(fieldId);
-                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
                 return fields;
             }
 
             /**
              * Find the _Fields constant that matches name, or null if its not found.
              */
-            public static _Fields findByName(String name) {
+            public static _Fields findByName(java.lang.String name) {
                 return byName.get(name);
             }
 
+            private final short _thriftId;
+            private final java.lang.String _fieldName;
+
+            _Fields(short thriftId, java.lang.String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
             public short getThriftFieldId() {
                 return _thriftId;
             }
 
-            public String getFieldName() {
+            public java.lang.String getFieldName() {
                 return _fieldName;
             }
         }
 
-    }
-
-    public static class echoI64_args implements org.apache.thrift.TBase<echoI64_args, echoI64_args._Fields>, java.io.Serializable, Cloneable {
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI64_args");
-        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.I64, (short) 1);
         // isset id assignments
         private static final int __ARG_ISSET_ID = 0;
-
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
         static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
             tmpMap.put(_Fields.ARG, new org.apache.thrift.meta_data.FieldMetaData("arg", org.apache.thrift.TFieldRequirementType.REQUIRED,
-                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
+                                                                                  new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
             org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoI64_args.class, metaDataMap);
         }
 
-        public long arg; // required
-        private BitSet __isset_bit_vector = new BitSet(1);
-
         public echoI64_args() {
         }
 
         public echoI64_args(
-                long arg) {
+                long arg)
+        {
             this();
             this.arg = arg;
             setArgIsSet(true);
@@ -2999,8 +4074,7 @@ public echoI64_args(
          * Performs a deep copy on <i>other</i>.
          */
         public echoI64_args(echoI64_args other) {
-            __isset_bit_vector.clear();
-            __isset_bit_vector.or(other.__isset_bit_vector);
+            __isset_bitfield = other.__isset_bitfield;
             this.arg = other.arg;
         }
 
@@ -3008,6 +4082,7 @@ public echoI64_args deepCopy() {
             return new echoI64_args(this);
         }
 
+        @Override
         public void clear() {
             setArgIsSet(false);
             this.arg = 0;
@@ -3024,64 +4099,67 @@ public echoI64_args setArg(long arg) {
         }
 
         public void unsetArg() {
-            __isset_bit_vector.clear(__ARG_ISSET_ID);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __ARG_ISSET_ID);
         }
 
         /** Returns true if field arg is set (has been assigned a value) and false otherwise */
         public boolean isSetArg() {
-            return __isset_bit_vector.get(__ARG_ISSET_ID);
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __ARG_ISSET_ID);
         }
 
         public void setArgIsSet(boolean value) {
-            __isset_bit_vector.set(__ARG_ISSET_ID, value);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __ARG_ISSET_ID, value);
         }
 
-        public void setFieldValue(_Fields field, Object value) {
+        public void setFieldValue(_Fields field, java.lang.Object value) {
             switch (field) {
                 case ARG:
                     if (value == null) {
                         unsetArg();
                     } else {
-                        setArg((Long) value);
+                        setArg((java.lang.Long)value);
                     }
                     break;
 
             }
         }
 
-        public Object getFieldValue(_Fields field) {
+        public java.lang.Object getFieldValue(_Fields field) {
             switch (field) {
                 case ARG:
-                    return Long.valueOf(getArg());
+                    return getArg();
 
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
         /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
         public boolean isSet(_Fields field) {
             if (field == null) {
-                throw new IllegalArgumentException();
+                throw new java.lang.IllegalArgumentException();
             }
 
             switch (field) {
                 case ARG:
                     return isSetArg();
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        public boolean equals(Object that) {
+        @Override
+        public boolean equals(java.lang.Object that) {
             if (that == null)
                 return false;
             if (that instanceof echoI64_args)
-                return this.equals((echoI64_args) that);
+                return this.equals((echoI64_args)that);
             return false;
         }
 
         public boolean equals(echoI64_args that) {
             if (that == null)
                 return false;
+            if (this == that)
+                return true;
 
             boolean this_present_arg = true;
             boolean that_present_arg = true;
@@ -3095,24 +4173,29 @@ public boolean equals(echoI64_args that) {
             return true;
         }
 
+        @Override
         public int hashCode() {
-            return 0;
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + org.apache.thrift.TBaseHelper.hashCode(arg);
+
+            return hashCode;
         }
 
+        @Override
         public int compareTo(echoI64_args other) {
             if (!getClass().equals(other.getClass())) {
                 return getClass().getName().compareTo(other.getClass().getName());
             }
 
             int lastComparison = 0;
-            echoI64_args typedOther = (echoI64_args) other;
 
-            lastComparison = Boolean.valueOf(isSetArg()).compareTo(typedOther.isSetArg());
+            lastComparison = java.lang.Boolean.valueOf(isSetArg()).compareTo(other.isSetArg());
             if (lastComparison != 0) {
                 return lastComparison;
             }
             if (isSetArg()) {
-                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, typedOther.arg);
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, other.arg);
                 if (lastComparison != 0) {
                     return lastComparison;
                 }
@@ -3125,49 +4208,16 @@ public _Fields fieldForId(int fieldId) {
         }
 
         public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            org.apache.thrift.protocol.TField field;
-            iprot.readStructBegin();
-            while (true) {
-                field = iprot.readFieldBegin();
-                if (field.type == org.apache.thrift.protocol.TType.STOP) {
-                    break;
-                }
-                switch (field.id) {
-                    case 1: // ARG
-                        if (field.type == org.apache.thrift.protocol.TType.I64) {
-                            this.arg = iprot.readI64();
-                            setArgIsSet(true);
-                        } else {
-                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                        }
-                        break;
-                    default:
-                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                }
-                iprot.readFieldEnd();
-            }
-            iprot.readStructEnd();
-
-            // check for required fields of primitive type, which can't be checked in the validate method
-            if (!isSetArg()) {
-                throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
-            }
-            validate();
+            scheme(iprot).read(iprot, this);
         }
 
         public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            validate();
-
-            oprot.writeStructBegin(STRUCT_DESC);
-            oprot.writeFieldBegin(ARG_FIELD_DESC);
-            oprot.writeI64(this.arg);
-            oprot.writeFieldEnd();
-            oprot.writeFieldStop();
-            oprot.writeStructEnd();
+            scheme(oprot).write(oprot, this);
         }
 
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echoI64_args(");
+        @Override
+        public java.lang.String toString() {
+            java.lang.StringBuilder sb = new java.lang.StringBuilder("echoI64_args(");
             boolean first = true;
 
             sb.append("arg:");
@@ -3180,6 +4230,7 @@ public String toString() {
         public void validate() throws org.apache.thrift.TException {
             // check for required fields
             // alas, we cannot check 'arg' because it's a primitive and you chose the non-beans generator.
+            // check for sub-struct validity
         }
 
         private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -3190,43 +4241,125 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
             }
         }
 
-        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
             try {
                 // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
-                __isset_bit_vector = new BitSet(1);
+                __isset_bitfield = 0;
                 read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
             } catch (org.apache.thrift.TException te) {
                 throw new java.io.IOException(te);
             }
         }
 
+        private static class echoI64_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI64_argsStandardScheme getScheme() {
+                return new echoI64_argsStandardScheme();
+            }
+        }
+
+        private static class echoI64_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoI64_args> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoI64_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 1: // ARG
+                            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+                                struct.arg = iprot.readI64();
+                                struct.setArgIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                if (!struct.isSetArg()) {
+                    throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
+                }
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoI64_args struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                oprot.writeFieldBegin(ARG_FIELD_DESC);
+                oprot.writeI64(struct.arg);
+                oprot.writeFieldEnd();
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoI64_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI64_argsTupleScheme getScheme() {
+                return new echoI64_argsTupleScheme();
+            }
+        }
+
+        private static class echoI64_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoI64_args> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoI64_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                oprot.writeI64(struct.arg);
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoI64_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                struct.arg = iprot.readI64();
+                struct.setArgIsSet(true);
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoI64_result implements org.apache.thrift.TBase<echoI64_result, echoI64_result._Fields>, java.io.Serializable, Cloneable, Comparable<echoI64_result>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI64_result");
+
+        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.I64, (short)0);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoI64_resultStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoI64_resultTupleSchemeFactory();
+
+        public long success; // required
+
         /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
         public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-            ARG((short) 1, "arg");
+            SUCCESS((short)0, "success");
 
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+            private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
             static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
                     byName.put(field.getFieldName(), field);
                 }
             }
 
-            private final short _thriftId;
-            private final String _fieldName;
-
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
-            }
-
             /**
              * Find the _Fields constant that matches fieldId, or null if its not found.
              */
             public static _Fields findByThriftId(int fieldId) {
-                switch (fieldId) {
-                    case 1: // ARG
-                        return ARG;
+                switch(fieldId) {
+                    case 0: // SUCCESS
+                        return SUCCESS;
                     default:
                         return null;
                 }
@@ -3238,51 +4371,52 @@ public static _Fields findByThriftId(int fieldId) {
              */
             public static _Fields findByThriftIdOrThrow(int fieldId) {
                 _Fields fields = findByThriftId(fieldId);
-                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
                 return fields;
             }
 
             /**
              * Find the _Fields constant that matches name, or null if its not found.
              */
-            public static _Fields findByName(String name) {
+            public static _Fields findByName(java.lang.String name) {
                 return byName.get(name);
             }
 
+            private final short _thriftId;
+            private final java.lang.String _fieldName;
+
+            _Fields(short thriftId, java.lang.String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
             public short getThriftFieldId() {
                 return _thriftId;
             }
 
-            public String getFieldName() {
+            public java.lang.String getFieldName() {
                 return _fieldName;
             }
         }
 
-    }
-
-    public static class echoI64_result implements org.apache.thrift.TBase<echoI64_result, echoI64_result._Fields>, java.io.Serializable, Cloneable {
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoI64_result");
-        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.I64, (short) 0);
         // isset id assignments
         private static final int __SUCCESS_ISSET_ID = 0;
-
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
         static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
             tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
-                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
+                                                                                      new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
             org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoI64_result.class, metaDataMap);
         }
 
-        public long success; // required
-        private BitSet __isset_bit_vector = new BitSet(1);
-
         public echoI64_result() {
         }
 
         public echoI64_result(
-                long success) {
+                long success)
+        {
             this();
             this.success = success;
             setSuccessIsSet(true);
@@ -3292,8 +4426,7 @@ public echoI64_result(
          * Performs a deep copy on <i>other</i>.
          */
         public echoI64_result(echoI64_result other) {
-            __isset_bit_vector.clear();
-            __isset_bit_vector.or(other.__isset_bit_vector);
+            __isset_bitfield = other.__isset_bitfield;
             this.success = other.success;
         }
 
@@ -3301,6 +4434,7 @@ public echoI64_result deepCopy() {
             return new echoI64_result(this);
         }
 
+        @Override
         public void clear() {
             setSuccessIsSet(false);
             this.success = 0;
@@ -3317,64 +4451,67 @@ public echoI64_result setSuccess(long success) {
         }
 
         public void unsetSuccess() {
-            __isset_bit_vector.clear(__SUCCESS_ISSET_ID);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
         }
 
         /** Returns true if field success is set (has been assigned a value) and false otherwise */
         public boolean isSetSuccess() {
-            return __isset_bit_vector.get(__SUCCESS_ISSET_ID);
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
         }
 
         public void setSuccessIsSet(boolean value) {
-            __isset_bit_vector.set(__SUCCESS_ISSET_ID, value);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
         }
 
-        public void setFieldValue(_Fields field, Object value) {
+        public void setFieldValue(_Fields field, java.lang.Object value) {
             switch (field) {
                 case SUCCESS:
                     if (value == null) {
                         unsetSuccess();
                     } else {
-                        setSuccess((Long) value);
+                        setSuccess((java.lang.Long)value);
                     }
                     break;
 
             }
         }
 
-        public Object getFieldValue(_Fields field) {
+        public java.lang.Object getFieldValue(_Fields field) {
             switch (field) {
                 case SUCCESS:
-                    return Long.valueOf(getSuccess());
+                    return getSuccess();
 
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
         /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
         public boolean isSet(_Fields field) {
             if (field == null) {
-                throw new IllegalArgumentException();
+                throw new java.lang.IllegalArgumentException();
             }
 
             switch (field) {
                 case SUCCESS:
                     return isSetSuccess();
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        public boolean equals(Object that) {
+        @Override
+        public boolean equals(java.lang.Object that) {
             if (that == null)
                 return false;
             if (that instanceof echoI64_result)
-                return this.equals((echoI64_result) that);
+                return this.equals((echoI64_result)that);
             return false;
         }
 
         public boolean equals(echoI64_result that) {
             if (that == null)
                 return false;
+            if (this == that)
+                return true;
 
             boolean this_present_success = true;
             boolean that_present_success = true;
@@ -3388,24 +4525,29 @@ public boolean equals(echoI64_result that) {
             return true;
         }
 
+        @Override
         public int hashCode() {
-            return 0;
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + org.apache.thrift.TBaseHelper.hashCode(success);
+
+            return hashCode;
         }
 
+        @Override
         public int compareTo(echoI64_result other) {
             if (!getClass().equals(other.getClass())) {
                 return getClass().getName().compareTo(other.getClass().getName());
             }
 
             int lastComparison = 0;
-            echoI64_result typedOther = (echoI64_result) other;
 
-            lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(typedOther.isSetSuccess());
+            lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
             if (lastComparison != 0) {
                 return lastComparison;
             }
             if (isSetSuccess()) {
-                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, typedOther.success);
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
                 if (lastComparison != 0) {
                     return lastComparison;
                 }
@@ -3418,47 +4560,16 @@ public _Fields fieldForId(int fieldId) {
         }
 
         public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            org.apache.thrift.protocol.TField field;
-            iprot.readStructBegin();
-            while (true) {
-                field = iprot.readFieldBegin();
-                if (field.type == org.apache.thrift.protocol.TType.STOP) {
-                    break;
-                }
-                switch (field.id) {
-                    case 0: // SUCCESS
-                        if (field.type == org.apache.thrift.protocol.TType.I64) {
-                            this.success = iprot.readI64();
-                            setSuccessIsSet(true);
-                        } else {
-                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                        }
-                        break;
-                    default:
-                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                }
-                iprot.readFieldEnd();
-            }
-            iprot.readStructEnd();
-
-            // check for required fields of primitive type, which can't be checked in the validate method
-            validate();
+            scheme(iprot).read(iprot, this);
         }
 
         public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            oprot.writeStructBegin(STRUCT_DESC);
-
-            if (this.isSetSuccess()) {
-                oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
-                oprot.writeI64(this.success);
-                oprot.writeFieldEnd();
-            }
-            oprot.writeFieldStop();
-            oprot.writeStructEnd();
+            scheme(oprot).write(oprot, this);
         }
 
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echoI64_result(");
+        @Override
+        public java.lang.String toString() {
+            java.lang.StringBuilder sb = new java.lang.StringBuilder("echoI64_result(");
             boolean first = true;
 
             sb.append("success:");
@@ -3470,6 +4581,7 @@ public String toString() {
 
         public void validate() throws org.apache.thrift.TException {
             // check for required fields
+            // check for sub-struct validity
         }
 
         private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -3480,41 +4592,134 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
             }
         }
 
-        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
             try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
                 read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
             } catch (org.apache.thrift.TException te) {
                 throw new java.io.IOException(te);
             }
         }
 
+        private static class echoI64_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI64_resultStandardScheme getScheme() {
+                return new echoI64_resultStandardScheme();
+            }
+        }
+
+        private static class echoI64_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoI64_result> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoI64_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 0: // SUCCESS
+                            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+                                struct.success = iprot.readI64();
+                                struct.setSuccessIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoI64_result struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.isSetSuccess()) {
+                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+                    oprot.writeI64(struct.success);
+                    oprot.writeFieldEnd();
+                }
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoI64_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoI64_resultTupleScheme getScheme() {
+                return new echoI64_resultTupleScheme();
+            }
+        }
+
+        private static class echoI64_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoI64_result> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoI64_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet optionals = new java.util.BitSet();
+                if (struct.isSetSuccess()) {
+                    optionals.set(0);
+                }
+                oprot.writeBitSet(optionals, 1);
+                if (struct.isSetSuccess()) {
+                    oprot.writeI64(struct.success);
+                }
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoI64_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet incoming = iprot.readBitSet(1);
+                if (incoming.get(0)) {
+                    struct.success = iprot.readI64();
+                    struct.setSuccessIsSet(true);
+                }
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoDouble_args implements org.apache.thrift.TBase<echoDouble_args, echoDouble_args._Fields>, java.io.Serializable, Cloneable, Comparable<echoDouble_args>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoDouble_args");
+
+        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.DOUBLE, (short)1);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoDouble_argsStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoDouble_argsTupleSchemeFactory();
+
+        public double arg; // required
+
         /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
         public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-            SUCCESS((short) 0, "success");
+            ARG((short)1, "arg");
 
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+            private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
             static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
                     byName.put(field.getFieldName(), field);
                 }
             }
 
-            private final short _thriftId;
-            private final String _fieldName;
-
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
-            }
-
             /**
              * Find the _Fields constant that matches fieldId, or null if its not found.
              */
             public static _Fields findByThriftId(int fieldId) {
-                switch (fieldId) {
-                    case 0: // SUCCESS
-                        return SUCCESS;
+                switch(fieldId) {
+                    case 1: // ARG
+                        return ARG;
                     default:
                         return null;
                 }
@@ -3526,51 +4731,52 @@ public static _Fields findByThriftId(int fieldId) {
              */
             public static _Fields findByThriftIdOrThrow(int fieldId) {
                 _Fields fields = findByThriftId(fieldId);
-                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
                 return fields;
             }
 
             /**
              * Find the _Fields constant that matches name, or null if its not found.
              */
-            public static _Fields findByName(String name) {
+            public static _Fields findByName(java.lang.String name) {
                 return byName.get(name);
             }
 
+            private final short _thriftId;
+            private final java.lang.String _fieldName;
+
+            _Fields(short thriftId, java.lang.String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
             public short getThriftFieldId() {
                 return _thriftId;
             }
 
-            public String getFieldName() {
+            public java.lang.String getFieldName() {
                 return _fieldName;
             }
         }
 
-    }
-
-    public static class echoDouble_args implements org.apache.thrift.TBase<echoDouble_args, echoDouble_args._Fields>, java.io.Serializable, Cloneable {
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoDouble_args");
-        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.DOUBLE, (short) 1);
         // isset id assignments
         private static final int __ARG_ISSET_ID = 0;
-
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
         static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
             tmpMap.put(_Fields.ARG, new org.apache.thrift.meta_data.FieldMetaData("arg", org.apache.thrift.TFieldRequirementType.REQUIRED,
-                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
+                                                                                  new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
             org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoDouble_args.class, metaDataMap);
         }
 
-        public double arg; // required
-        private BitSet __isset_bit_vector = new BitSet(1);
-
         public echoDouble_args() {
         }
 
         public echoDouble_args(
-                double arg) {
+                double arg)
+        {
             this();
             this.arg = arg;
             setArgIsSet(true);
@@ -3580,8 +4786,7 @@ public echoDouble_args(
          * Performs a deep copy on <i>other</i>.
          */
         public echoDouble_args(echoDouble_args other) {
-            __isset_bit_vector.clear();
-            __isset_bit_vector.or(other.__isset_bit_vector);
+            __isset_bitfield = other.__isset_bitfield;
             this.arg = other.arg;
         }
 
@@ -3589,6 +4794,7 @@ public echoDouble_args deepCopy() {
             return new echoDouble_args(this);
         }
 
+        @Override
         public void clear() {
             setArgIsSet(false);
             this.arg = 0.0;
@@ -3605,64 +4811,67 @@ public echoDouble_args setArg(double arg) {
         }
 
         public void unsetArg() {
-            __isset_bit_vector.clear(__ARG_ISSET_ID);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __ARG_ISSET_ID);
         }
 
         /** Returns true if field arg is set (has been assigned a value) and false otherwise */
         public boolean isSetArg() {
-            return __isset_bit_vector.get(__ARG_ISSET_ID);
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __ARG_ISSET_ID);
         }
 
         public void setArgIsSet(boolean value) {
-            __isset_bit_vector.set(__ARG_ISSET_ID, value);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __ARG_ISSET_ID, value);
         }
 
-        public void setFieldValue(_Fields field, Object value) {
+        public void setFieldValue(_Fields field, java.lang.Object value) {
             switch (field) {
                 case ARG:
                     if (value == null) {
                         unsetArg();
                     } else {
-                        setArg((Double) value);
+                        setArg((java.lang.Double)value);
                     }
                     break;
 
             }
         }
 
-        public Object getFieldValue(_Fields field) {
+        public java.lang.Object getFieldValue(_Fields field) {
             switch (field) {
                 case ARG:
-                    return Double.valueOf(getArg());
+                    return getArg();
 
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
         /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
         public boolean isSet(_Fields field) {
             if (field == null) {
-                throw new IllegalArgumentException();
+                throw new java.lang.IllegalArgumentException();
             }
 
             switch (field) {
                 case ARG:
                     return isSetArg();
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        public boolean equals(Object that) {
+        @Override
+        public boolean equals(java.lang.Object that) {
             if (that == null)
                 return false;
             if (that instanceof echoDouble_args)
-                return this.equals((echoDouble_args) that);
+                return this.equals((echoDouble_args)that);
             return false;
         }
 
         public boolean equals(echoDouble_args that) {
             if (that == null)
                 return false;
+            if (this == that)
+                return true;
 
             boolean this_present_arg = true;
             boolean that_present_arg = true;
@@ -3676,24 +4885,29 @@ public boolean equals(echoDouble_args that) {
             return true;
         }
 
+        @Override
         public int hashCode() {
-            return 0;
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + org.apache.thrift.TBaseHelper.hashCode(arg);
+
+            return hashCode;
         }
 
+        @Override
         public int compareTo(echoDouble_args other) {
             if (!getClass().equals(other.getClass())) {
                 return getClass().getName().compareTo(other.getClass().getName());
             }
 
             int lastComparison = 0;
-            echoDouble_args typedOther = (echoDouble_args) other;
 
-            lastComparison = Boolean.valueOf(isSetArg()).compareTo(typedOther.isSetArg());
+            lastComparison = java.lang.Boolean.valueOf(isSetArg()).compareTo(other.isSetArg());
             if (lastComparison != 0) {
                 return lastComparison;
             }
             if (isSetArg()) {
-                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, typedOther.arg);
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, other.arg);
                 if (lastComparison != 0) {
                     return lastComparison;
                 }
@@ -3706,49 +4920,16 @@ public _Fields fieldForId(int fieldId) {
         }
 
         public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            org.apache.thrift.protocol.TField field;
-            iprot.readStructBegin();
-            while (true) {
-                field = iprot.readFieldBegin();
-                if (field.type == org.apache.thrift.protocol.TType.STOP) {
-                    break;
-                }
-                switch (field.id) {
-                    case 1: // ARG
-                        if (field.type == org.apache.thrift.protocol.TType.DOUBLE) {
-                            this.arg = iprot.readDouble();
-                            setArgIsSet(true);
-                        } else {
-                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                        }
-                        break;
-                    default:
-                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                }
-                iprot.readFieldEnd();
-            }
-            iprot.readStructEnd();
-
-            // check for required fields of primitive type, which can't be checked in the validate method
-            if (!isSetArg()) {
-                throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
-            }
-            validate();
+            scheme(iprot).read(iprot, this);
         }
 
         public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            validate();
-
-            oprot.writeStructBegin(STRUCT_DESC);
-            oprot.writeFieldBegin(ARG_FIELD_DESC);
-            oprot.writeDouble(this.arg);
-            oprot.writeFieldEnd();
-            oprot.writeFieldStop();
-            oprot.writeStructEnd();
+            scheme(oprot).write(oprot, this);
         }
 
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echoDouble_args(");
+        @Override
+        public java.lang.String toString() {
+            java.lang.StringBuilder sb = new java.lang.StringBuilder("echoDouble_args(");
             boolean first = true;
 
             sb.append("arg:");
@@ -3761,6 +4942,7 @@ public String toString() {
         public void validate() throws org.apache.thrift.TException {
             // check for required fields
             // alas, we cannot check 'arg' because it's a primitive and you chose the non-beans generator.
+            // check for sub-struct validity
         }
 
         private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -3771,43 +4953,125 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
             }
         }
 
-        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
-            try {
-                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
-                __isset_bit_vector = new BitSet(1);
-                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
-            } catch (org.apache.thrift.TException te) {
-                throw new java.io.IOException(te);
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+            try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
+                read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+            } catch (org.apache.thrift.TException te) {
+                throw new java.io.IOException(te);
+            }
+        }
+
+        private static class echoDouble_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoDouble_argsStandardScheme getScheme() {
+                return new echoDouble_argsStandardScheme();
+            }
+        }
+
+        private static class echoDouble_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoDouble_args> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoDouble_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 1: // ARG
+                            if (schemeField.type == org.apache.thrift.protocol.TType.DOUBLE) {
+                                struct.arg = iprot.readDouble();
+                                struct.setArgIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                if (!struct.isSetArg()) {
+                    throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not found in serialized data! Struct: " + toString());
+                }
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoDouble_args struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                oprot.writeFieldBegin(ARG_FIELD_DESC);
+                oprot.writeDouble(struct.arg);
+                oprot.writeFieldEnd();
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoDouble_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoDouble_argsTupleScheme getScheme() {
+                return new echoDouble_argsTupleScheme();
+            }
+        }
+
+        private static class echoDouble_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoDouble_args> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoDouble_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                oprot.writeDouble(struct.arg);
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoDouble_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                struct.arg = iprot.readDouble();
+                struct.setArgIsSet(true);
             }
         }
 
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoDouble_result implements org.apache.thrift.TBase<echoDouble_result, echoDouble_result._Fields>, java.io.Serializable, Cloneable, Comparable<echoDouble_result>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoDouble_result");
+
+        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.DOUBLE, (short)0);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoDouble_resultStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoDouble_resultTupleSchemeFactory();
+
+        public double success; // required
+
         /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
         public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-            ARG((short) 1, "arg");
+            SUCCESS((short)0, "success");
 
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+            private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
             static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
                     byName.put(field.getFieldName(), field);
                 }
             }
 
-            private final short _thriftId;
-            private final String _fieldName;
-
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
-            }
-
             /**
              * Find the _Fields constant that matches fieldId, or null if its not found.
              */
             public static _Fields findByThriftId(int fieldId) {
-                switch (fieldId) {
-                    case 1: // ARG
-                        return ARG;
+                switch(fieldId) {
+                    case 0: // SUCCESS
+                        return SUCCESS;
                     default:
                         return null;
                 }
@@ -3819,51 +5083,52 @@ public static _Fields findByThriftId(int fieldId) {
              */
             public static _Fields findByThriftIdOrThrow(int fieldId) {
                 _Fields fields = findByThriftId(fieldId);
-                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
                 return fields;
             }
 
             /**
              * Find the _Fields constant that matches name, or null if its not found.
              */
-            public static _Fields findByName(String name) {
+            public static _Fields findByName(java.lang.String name) {
                 return byName.get(name);
             }
 
+            private final short _thriftId;
+            private final java.lang.String _fieldName;
+
+            _Fields(short thriftId, java.lang.String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
             public short getThriftFieldId() {
                 return _thriftId;
             }
 
-            public String getFieldName() {
+            public java.lang.String getFieldName() {
                 return _fieldName;
             }
         }
 
-    }
-
-    public static class echoDouble_result implements org.apache.thrift.TBase<echoDouble_result, echoDouble_result._Fields>, java.io.Serializable, Cloneable {
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoDouble_result");
-        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.DOUBLE, (short) 0);
         // isset id assignments
         private static final int __SUCCESS_ISSET_ID = 0;
-
+        private byte __isset_bitfield = 0;
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
         static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
             tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
-                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
+                                                                                      new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
             org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoDouble_result.class, metaDataMap);
         }
 
-        public double success; // required
-        private BitSet __isset_bit_vector = new BitSet(1);
-
         public echoDouble_result() {
         }
 
         public echoDouble_result(
-                double success) {
+                double success)
+        {
             this();
             this.success = success;
             setSuccessIsSet(true);
@@ -3873,8 +5138,7 @@ public echoDouble_result(
          * Performs a deep copy on <i>other</i>.
          */
         public echoDouble_result(echoDouble_result other) {
-            __isset_bit_vector.clear();
-            __isset_bit_vector.or(other.__isset_bit_vector);
+            __isset_bitfield = other.__isset_bitfield;
             this.success = other.success;
         }
 
@@ -3882,6 +5146,7 @@ public echoDouble_result deepCopy() {
             return new echoDouble_result(this);
         }
 
+        @Override
         public void clear() {
             setSuccessIsSet(false);
             this.success = 0.0;
@@ -3898,64 +5163,67 @@ public echoDouble_result setSuccess(double success) {
         }
 
         public void unsetSuccess() {
-            __isset_bit_vector.clear(__SUCCESS_ISSET_ID);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
         }
 
         /** Returns true if field success is set (has been assigned a value) and false otherwise */
         public boolean isSetSuccess() {
-            return __isset_bit_vector.get(__SUCCESS_ISSET_ID);
+            return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
         }
 
         public void setSuccessIsSet(boolean value) {
-            __isset_bit_vector.set(__SUCCESS_ISSET_ID, value);
+            __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
         }
 
-        public void setFieldValue(_Fields field, Object value) {
+        public void setFieldValue(_Fields field, java.lang.Object value) {
             switch (field) {
                 case SUCCESS:
                     if (value == null) {
                         unsetSuccess();
                     } else {
-                        setSuccess((Double) value);
+                        setSuccess((java.lang.Double)value);
                     }
                     break;
 
             }
         }
 
-        public Object getFieldValue(_Fields field) {
+        public java.lang.Object getFieldValue(_Fields field) {
             switch (field) {
                 case SUCCESS:
-                    return Double.valueOf(getSuccess());
+                    return getSuccess();
 
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
         /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
         public boolean isSet(_Fields field) {
             if (field == null) {
-                throw new IllegalArgumentException();
+                throw new java.lang.IllegalArgumentException();
             }
 
             switch (field) {
                 case SUCCESS:
                     return isSetSuccess();
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        public boolean equals(Object that) {
+        @Override
+        public boolean equals(java.lang.Object that) {
             if (that == null)
                 return false;
             if (that instanceof echoDouble_result)
-                return this.equals((echoDouble_result) that);
+                return this.equals((echoDouble_result)that);
             return false;
         }
 
         public boolean equals(echoDouble_result that) {
             if (that == null)
                 return false;
+            if (this == that)
+                return true;
 
             boolean this_present_success = true;
             boolean that_present_success = true;
@@ -3969,24 +5237,29 @@ public boolean equals(echoDouble_result that) {
             return true;
         }
 
+        @Override
         public int hashCode() {
-            return 0;
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + org.apache.thrift.TBaseHelper.hashCode(success);
+
+            return hashCode;
         }
 
+        @Override
         public int compareTo(echoDouble_result other) {
             if (!getClass().equals(other.getClass())) {
                 return getClass().getName().compareTo(other.getClass().getName());
             }
 
             int lastComparison = 0;
-            echoDouble_result typedOther = (echoDouble_result) other;
 
-            lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(typedOther.isSetSuccess());
+            lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
             if (lastComparison != 0) {
                 return lastComparison;
             }
             if (isSetSuccess()) {
-                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, typedOther.success);
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
                 if (lastComparison != 0) {
                     return lastComparison;
                 }
@@ -3999,47 +5272,16 @@ public _Fields fieldForId(int fieldId) {
         }
 
         public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            org.apache.thrift.protocol.TField field;
-            iprot.readStructBegin();
-            while (true) {
-                field = iprot.readFieldBegin();
-                if (field.type == org.apache.thrift.protocol.TType.STOP) {
-                    break;
-                }
-                switch (field.id) {
-                    case 0: // SUCCESS
-                        if (field.type == org.apache.thrift.protocol.TType.DOUBLE) {
-                            this.success = iprot.readDouble();
-                            setSuccessIsSet(true);
-                        } else {
-                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                        }
-                        break;
-                    default:
-                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                }
-                iprot.readFieldEnd();
-            }
-            iprot.readStructEnd();
-
-            // check for required fields of primitive type, which can't be checked in the validate method
-            validate();
+            scheme(iprot).read(iprot, this);
         }
 
         public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            oprot.writeStructBegin(STRUCT_DESC);
-
-            if (this.isSetSuccess()) {
-                oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
-                oprot.writeDouble(this.success);
-                oprot.writeFieldEnd();
-            }
-            oprot.writeFieldStop();
-            oprot.writeStructEnd();
+            scheme(oprot).write(oprot, this);
         }
 
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echoDouble_result(");
+        @Override
+        public java.lang.String toString() {
+            java.lang.StringBuilder sb = new java.lang.StringBuilder("echoDouble_result(");
             boolean first = true;
 
             sb.append("success:");
@@ -4051,6 +5293,7 @@ public String toString() {
 
         public void validate() throws org.apache.thrift.TException {
             // check for required fields
+            // check for sub-struct validity
         }
 
         private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -4061,41 +5304,134 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
             }
         }
 
-        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
             try {
+                // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+                __isset_bitfield = 0;
                 read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
             } catch (org.apache.thrift.TException te) {
                 throw new java.io.IOException(te);
             }
         }
 
+        private static class echoDouble_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoDouble_resultStandardScheme getScheme() {
+                return new echoDouble_resultStandardScheme();
+            }
+        }
+
+        private static class echoDouble_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoDouble_result> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoDouble_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 0: // SUCCESS
+                            if (schemeField.type == org.apache.thrift.protocol.TType.DOUBLE) {
+                                struct.success = iprot.readDouble();
+                                struct.setSuccessIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoDouble_result struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.isSetSuccess()) {
+                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+                    oprot.writeDouble(struct.success);
+                    oprot.writeFieldEnd();
+                }
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoDouble_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoDouble_resultTupleScheme getScheme() {
+                return new echoDouble_resultTupleScheme();
+            }
+        }
+
+        private static class echoDouble_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoDouble_result> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoDouble_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet optionals = new java.util.BitSet();
+                if (struct.isSetSuccess()) {
+                    optionals.set(0);
+                }
+                oprot.writeBitSet(optionals, 1);
+                if (struct.isSetSuccess()) {
+                    oprot.writeDouble(struct.success);
+                }
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoDouble_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet incoming = iprot.readBitSet(1);
+                if (incoming.get(0)) {
+                    struct.success = iprot.readDouble();
+                    struct.setSuccessIsSet(true);
+                }
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoString_args implements org.apache.thrift.TBase<echoString_args, echoString_args._Fields>, java.io.Serializable, Cloneable, Comparable<echoString_args>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoString_args");
+
+        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.STRING, (short)1);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoString_argsStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoString_argsTupleSchemeFactory();
+
+        public java.lang.String arg; // required
+
         /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
         public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-            SUCCESS((short) 0, "success");
+            ARG((short)1, "arg");
 
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+            private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
             static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
                     byName.put(field.getFieldName(), field);
                 }
             }
 
-            private final short _thriftId;
-            private final String _fieldName;
-
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
-            }
-
             /**
              * Find the _Fields constant that matches fieldId, or null if its not found.
              */
             public static _Fields findByThriftId(int fieldId) {
-                switch (fieldId) {
-                    case 0: // SUCCESS
-                        return SUCCESS;
+                switch(fieldId) {
+                    case 1: // ARG
+                        return ARG;
                     default:
                         return null;
                 }
@@ -4107,50 +5443,50 @@ public static _Fields findByThriftId(int fieldId) {
              */
             public static _Fields findByThriftIdOrThrow(int fieldId) {
                 _Fields fields = findByThriftId(fieldId);
-                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
                 return fields;
             }
 
             /**
              * Find the _Fields constant that matches name, or null if its not found.
              */
-            public static _Fields findByName(String name) {
+            public static _Fields findByName(java.lang.String name) {
                 return byName.get(name);
             }
 
+            private final short _thriftId;
+            private final java.lang.String _fieldName;
+
+            _Fields(short thriftId, java.lang.String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
             public short getThriftFieldId() {
                 return _thriftId;
             }
 
-            public String getFieldName() {
+            public java.lang.String getFieldName() {
                 return _fieldName;
             }
         }
 
-    }
-
-    public static class echoString_args implements org.apache.thrift.TBase<echoString_args, echoString_args._Fields>, java.io.Serializable, Cloneable {
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoString_args");
-        private static final org.apache.thrift.protocol.TField ARG_FIELD_DESC = new org.apache.thrift.protocol.TField("arg", org.apache.thrift.protocol.TType.STRING, (short) 1);
-
+        // isset id assignments
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
         static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
             tmpMap.put(_Fields.ARG, new org.apache.thrift.meta_data.FieldMetaData("arg", org.apache.thrift.TFieldRequirementType.REQUIRED,
-                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
+                                                                                  new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
             org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoString_args.class, metaDataMap);
         }
 
-        // isset id assignments
-
-        public String arg; // required
-
         public echoString_args() {
         }
 
         public echoString_args(
-                String arg) {
+                java.lang.String arg)
+        {
             this();
             this.arg = arg;
         }
@@ -4168,15 +5504,16 @@ public echoString_args deepCopy() {
             return new echoString_args(this);
         }
 
+        @Override
         public void clear() {
             this.arg = null;
         }
 
-        public String getArg() {
+        public java.lang.String getArg() {
             return this.arg;
         }
 
-        public echoString_args setArg(String arg) {
+        public echoString_args setArg(java.lang.String arg) {
             this.arg = arg;
             return this;
         }
@@ -4196,52 +5533,55 @@ public void setArgIsSet(boolean value) {
             }
         }
 
-        public void setFieldValue(_Fields field, Object value) {
+        public void setFieldValue(_Fields field, java.lang.Object value) {
             switch (field) {
                 case ARG:
                     if (value == null) {
                         unsetArg();
                     } else {
-                        setArg((String) value);
+                        setArg((java.lang.String)value);
                     }
                     break;
 
             }
         }
 
-        public Object getFieldValue(_Fields field) {
+        public java.lang.Object getFieldValue(_Fields field) {
             switch (field) {
                 case ARG:
                     return getArg();
 
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
         /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
         public boolean isSet(_Fields field) {
             if (field == null) {
-                throw new IllegalArgumentException();
+                throw new java.lang.IllegalArgumentException();
             }
 
             switch (field) {
                 case ARG:
                     return isSetArg();
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        public boolean equals(Object that) {
+        @Override
+        public boolean equals(java.lang.Object that) {
             if (that == null)
                 return false;
             if (that instanceof echoString_args)
-                return this.equals((echoString_args) that);
+                return this.equals((echoString_args)that);
             return false;
         }
 
         public boolean equals(echoString_args that) {
             if (that == null)
                 return false;
+            if (this == that)
+                return true;
 
             boolean this_present_arg = true && this.isSetArg();
             boolean that_present_arg = true && that.isSetArg();
@@ -4255,24 +5595,31 @@ public boolean equals(echoString_args that) {
             return true;
         }
 
+        @Override
         public int hashCode() {
-            return 0;
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + ((isSetArg()) ? 131071 : 524287);
+            if (isSetArg())
+                hashCode = hashCode * 8191 + arg.hashCode();
+
+            return hashCode;
         }
 
+        @Override
         public int compareTo(echoString_args other) {
             if (!getClass().equals(other.getClass())) {
                 return getClass().getName().compareTo(other.getClass().getName());
             }
 
             int lastComparison = 0;
-            echoString_args typedOther = (echoString_args) other;
 
-            lastComparison = Boolean.valueOf(isSetArg()).compareTo(typedOther.isSetArg());
+            lastComparison = java.lang.Boolean.valueOf(isSetArg()).compareTo(other.isSetArg());
             if (lastComparison != 0) {
                 return lastComparison;
             }
             if (isSetArg()) {
-                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, typedOther.arg);
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.arg, other.arg);
                 if (lastComparison != 0) {
                     return lastComparison;
                 }
@@ -4285,47 +5632,16 @@ public _Fields fieldForId(int fieldId) {
         }
 
         public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            org.apache.thrift.protocol.TField field;
-            iprot.readStructBegin();
-            while (true) {
-                field = iprot.readFieldBegin();
-                if (field.type == org.apache.thrift.protocol.TType.STOP) {
-                    break;
-                }
-                switch (field.id) {
-                    case 1: // ARG
-                        if (field.type == org.apache.thrift.protocol.TType.STRING) {
-                            this.arg = iprot.readString();
-                        } else {
-                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                        }
-                        break;
-                    default:
-                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                }
-                iprot.readFieldEnd();
-            }
-            iprot.readStructEnd();
-
-            // check for required fields of primitive type, which can't be checked in the validate method
-            validate();
+            scheme(iprot).read(iprot, this);
         }
 
         public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            validate();
-
-            oprot.writeStructBegin(STRUCT_DESC);
-            if (this.arg != null) {
-                oprot.writeFieldBegin(ARG_FIELD_DESC);
-                oprot.writeString(this.arg);
-                oprot.writeFieldEnd();
-            }
-            oprot.writeFieldStop();
-            oprot.writeStructEnd();
+            scheme(oprot).write(oprot, this);
         }
 
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echoString_args(");
+        @Override
+        public java.lang.String toString() {
+            java.lang.StringBuilder sb = new java.lang.StringBuilder("echoString_args(");
             boolean first = true;
 
             sb.append("arg:");
@@ -4344,6 +5660,7 @@ public void validate() throws org.apache.thrift.TException {
             if (arg == null) {
                 throw new org.apache.thrift.protocol.TProtocolException("Required field 'arg' was not present! Struct: " + toString());
             }
+            // check for sub-struct validity
         }
 
         private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -4354,7 +5671,7 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
             }
         }
 
-        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
             try {
                 read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
             } catch (org.apache.thrift.TException te) {
@@ -4362,33 +5679,114 @@ private void readObject(java.io.ObjectInputStream in) throws java.io.IOException
             }
         }
 
+        private static class echoString_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoString_argsStandardScheme getScheme() {
+                return new echoString_argsStandardScheme();
+            }
+        }
+
+        private static class echoString_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoString_args> {
+
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoString_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 1: // ARG
+                            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                                struct.arg = iprot.readString();
+                                struct.setArgIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
+                }
+                iprot.readStructEnd();
+
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
+            }
+
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoString_args struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.arg != null) {
+                    oprot.writeFieldBegin(ARG_FIELD_DESC);
+                    oprot.writeString(struct.arg);
+                    oprot.writeFieldEnd();
+                }
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
+            }
+
+        }
+
+        private static class echoString_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoString_argsTupleScheme getScheme() {
+                return new echoString_argsTupleScheme();
+            }
+        }
+
+        private static class echoString_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoString_args> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoString_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                oprot.writeString(struct.arg);
+            }
+
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoString_args struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                struct.arg = iprot.readString();
+                struct.setArgIsSet(true);
+            }
+        }
+
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
+    }
+
+    public static class echoString_result implements org.apache.thrift.TBase<echoString_result, echoString_result._Fields>, java.io.Serializable, Cloneable, Comparable<echoString_result>   {
+        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoString_result");
+
+        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.STRING, (short)0);
+
+        private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echoString_resultStandardSchemeFactory();
+        private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echoString_resultTupleSchemeFactory();
+
+        public java.lang.String success; // required
+
         /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
         public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-            ARG((short) 1, "arg");
+            SUCCESS((short)0, "success");
 
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+            private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
             static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
+                for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
                     byName.put(field.getFieldName(), field);
                 }
             }
 
-            private final short _thriftId;
-            private final String _fieldName;
-
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
-            }
-
             /**
              * Find the _Fields constant that matches fieldId, or null if its not found.
              */
             public static _Fields findByThriftId(int fieldId) {
-                switch (fieldId) {
-                    case 1: // ARG
-                        return ARG;
+                switch(fieldId) {
+                    case 0: // SUCCESS
+                        return SUCCESS;
                     default:
                         return null;
                 }
@@ -4400,50 +5798,50 @@ public static _Fields findByThriftId(int fieldId) {
              */
             public static _Fields findByThriftIdOrThrow(int fieldId) {
                 _Fields fields = findByThriftId(fieldId);
-                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+                if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
                 return fields;
             }
 
             /**
              * Find the _Fields constant that matches name, or null if its not found.
              */
-            public static _Fields findByName(String name) {
+            public static _Fields findByName(java.lang.String name) {
                 return byName.get(name);
             }
 
+            private final short _thriftId;
+            private final java.lang.String _fieldName;
+
+            _Fields(short thriftId, java.lang.String fieldName) {
+                _thriftId = thriftId;
+                _fieldName = fieldName;
+            }
+
             public short getThriftFieldId() {
                 return _thriftId;
             }
 
-            public String getFieldName() {
+            public java.lang.String getFieldName() {
                 return _fieldName;
             }
         }
 
-    }
-
-    public static class echoString_result implements org.apache.thrift.TBase<echoString_result, echoString_result._Fields>, java.io.Serializable, Cloneable {
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echoString_result");
-        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.STRING, (short) 0);
-
+        // isset id assignments
+        public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
         static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+            java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
             tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
-                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
+                                                                                      new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+            metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
             org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echoString_result.class, metaDataMap);
         }
 
-        // isset id assignments
-
-        public String success; // required
-
         public echoString_result() {
         }
 
         public echoString_result(
-                String success) {
+                java.lang.String success)
+        {
             this();
             this.success = success;
         }
@@ -4461,15 +5859,16 @@ public echoString_result deepCopy() {
             return new echoString_result(this);
         }
 
+        @Override
         public void clear() {
             this.success = null;
         }
 
-        public String getSuccess() {
+        public java.lang.String getSuccess() {
             return this.success;
         }
 
-        public echoString_result setSuccess(String success) {
+        public echoString_result setSuccess(java.lang.String success) {
             this.success = success;
             return this;
         }
@@ -4489,52 +5888,55 @@ public void setSuccessIsSet(boolean value) {
             }
         }
 
-        public void setFieldValue(_Fields field, Object value) {
+        public void setFieldValue(_Fields field, java.lang.Object value) {
             switch (field) {
                 case SUCCESS:
                     if (value == null) {
                         unsetSuccess();
                     } else {
-                        setSuccess((String) value);
+                        setSuccess((java.lang.String)value);
                     }
                     break;
 
             }
         }
 
-        public Object getFieldValue(_Fields field) {
+        public java.lang.Object getFieldValue(_Fields field) {
             switch (field) {
                 case SUCCESS:
                     return getSuccess();
 
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
         /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
         public boolean isSet(_Fields field) {
             if (field == null) {
-                throw new IllegalArgumentException();
+                throw new java.lang.IllegalArgumentException();
             }
 
             switch (field) {
                 case SUCCESS:
                     return isSetSuccess();
             }
-            throw new IllegalStateException();
+            throw new java.lang.IllegalStateException();
         }
 
-        public boolean equals(Object that) {
+        @Override
+        public boolean equals(java.lang.Object that) {
             if (that == null)
                 return false;
             if (that instanceof echoString_result)
-                return this.equals((echoString_result) that);
+                return this.equals((echoString_result)that);
             return false;
         }
 
         public boolean equals(echoString_result that) {
             if (that == null)
                 return false;
+            if (this == that)
+                return true;
 
             boolean this_present_success = true && this.isSetSuccess();
             boolean that_present_success = true && that.isSetSuccess();
@@ -4548,24 +5950,31 @@ public boolean equals(echoString_result that) {
             return true;
         }
 
+        @Override
         public int hashCode() {
-            return 0;
+            int hashCode = 1;
+
+            hashCode = hashCode * 8191 + ((isSetSuccess()) ? 131071 : 524287);
+            if (isSetSuccess())
+                hashCode = hashCode * 8191 + success.hashCode();
+
+            return hashCode;
         }
 
+        @Override
         public int compareTo(echoString_result other) {
             if (!getClass().equals(other.getClass())) {
                 return getClass().getName().compareTo(other.getClass().getName());
             }
 
             int lastComparison = 0;
-            echoString_result typedOther = (echoString_result) other;
 
-            lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(typedOther.isSetSuccess());
+            lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
             if (lastComparison != 0) {
                 return lastComparison;
             }
             if (isSetSuccess()) {
-                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, typedOther.success);
+                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
                 if (lastComparison != 0) {
                     return lastComparison;
                 }
@@ -4578,46 +5987,16 @@ public _Fields fieldForId(int fieldId) {
         }
 
         public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            org.apache.thrift.protocol.TField field;
-            iprot.readStructBegin();
-            while (true) {
-                field = iprot.readFieldBegin();
-                if (field.type == org.apache.thrift.protocol.TType.STOP) {
-                    break;
-                }
-                switch (field.id) {
-                    case 0: // SUCCESS
-                        if (field.type == org.apache.thrift.protocol.TType.STRING) {
-                            this.success = iprot.readString();
-                        } else {
-                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                        }
-                        break;
-                    default:
-                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-                }
-                iprot.readFieldEnd();
-            }
-            iprot.readStructEnd();
-
-            // check for required fields of primitive type, which can't be checked in the validate method
-            validate();
+            scheme(iprot).read(iprot, this);
         }
 
         public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            oprot.writeStructBegin(STRUCT_DESC);
-
-            if (this.isSetSuccess()) {
-                oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
-                oprot.writeString(this.success);
-                oprot.writeFieldEnd();
-            }
-            oprot.writeFieldStop();
-            oprot.writeStructEnd();
+            scheme(oprot).write(oprot, this);
         }
 
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echoString_result(");
+        @Override
+        public java.lang.String toString() {
+            java.lang.StringBuilder sb = new java.lang.StringBuilder("echoString_result(");
             boolean first = true;
 
             sb.append("success:");
@@ -4633,6 +6012,7 @@ public String toString() {
 
         public void validate() throws org.apache.thrift.TException {
             // check for required fields
+            // check for sub-struct validity
         }
 
         private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -4643,7 +6023,7 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
             }
         }
 
-        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+        private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
             try {
                 read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
             } catch (org.apache.thrift.TException te) {
@@ -4651,66 +6031,93 @@ private void readObject(java.io.ObjectInputStream in) throws java.io.IOException
             }
         }
 
-        /**
-         * The set of fields this struct contains, along with convenience methods for finding and manipulating them.
-         */
-        public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-            SUCCESS((short) 0, "success");
+        private static class echoString_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoString_resultStandardScheme getScheme() {
+                return new echoString_resultStandardScheme();
+            }
+        }
 
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+        private static class echoString_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<echoString_result> {
 
-            static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
-                    byName.put(field.getFieldName(), field);
+            public void read(org.apache.thrift.protocol.TProtocol iprot, echoString_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TField schemeField;
+                iprot.readStructBegin();
+                while (true)
+                {
+                    schemeField = iprot.readFieldBegin();
+                    if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                        break;
+                    }
+                    switch (schemeField.id) {
+                        case 0: // SUCCESS
+                            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                                struct.success = iprot.readString();
+                                struct.setSuccessIsSet(true);
+                            } else {
+                                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                            }
+                            break;
+                        default:
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                    }
+                    iprot.readFieldEnd();
                 }
-            }
-
-            private final short _thriftId;
-            private final String _fieldName;
+                iprot.readStructEnd();
 
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
+                // check for required fields of primitive type, which can't be checked in the validate method
+                struct.validate();
             }
 
-            /**
-             * Find the _Fields constant that matches fieldId, or null if its not found.
-             */
-            public static _Fields findByThriftId(int fieldId) {
-                switch (fieldId) {
-                    case 0: // SUCCESS
-                        return SUCCESS;
-                    default:
-                        return null;
+            public void write(org.apache.thrift.protocol.TProtocol oprot, echoString_result struct) throws org.apache.thrift.TException {
+                struct.validate();
+
+                oprot.writeStructBegin(STRUCT_DESC);
+                if (struct.success != null) {
+                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+                    oprot.writeString(struct.success);
+                    oprot.writeFieldEnd();
                 }
+                oprot.writeFieldStop();
+                oprot.writeStructEnd();
             }
 
-            /**
-             * Find the _Fields constant that matches fieldId, throwing an exception
-             * if it is not found.
-             */
-            public static _Fields findByThriftIdOrThrow(int fieldId) {
-                _Fields fields = findByThriftId(fieldId);
-                if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
-                return fields;
-            }
+        }
 
-            /**
-             * Find the _Fields constant that matches name, or null if its not found.
-             */
-            public static _Fields findByName(String name) {
-                return byName.get(name);
+        private static class echoString_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+            public echoString_resultTupleScheme getScheme() {
+                return new echoString_resultTupleScheme();
             }
+        }
 
-            public short getThriftFieldId() {
-                return _thriftId;
+        private static class echoString_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<echoString_result> {
+
+            @Override
+            public void write(org.apache.thrift.protocol.TProtocol prot, echoString_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet optionals = new java.util.BitSet();
+                if (struct.isSetSuccess()) {
+                    optionals.set(0);
+                }
+                oprot.writeBitSet(optionals, 1);
+                if (struct.isSetSuccess()) {
+                    oprot.writeString(struct.success);
+                }
             }
 
-            public String getFieldName() {
-                return _fieldName;
+            @Override
+            public void read(org.apache.thrift.protocol.TProtocol prot, echoString_result struct) throws org.apache.thrift.TException {
+                org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+                java.util.BitSet incoming = iprot.readBitSet(1);
+                if (incoming.get(0)) {
+                    struct.success = iprot.readString();
+                    struct.setSuccessIsSet(true);
+                }
             }
         }
 
+        private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+            return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+        }
     }
 
 }
diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/DubboDemoImpl.java b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/DubboDemoImpl.java
index 227a825e9a..7415c2a447 100644
--- a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/DubboDemoImpl.java
+++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/DubboDemoImpl.java
@@ -16,6 +16,7 @@
  */
 package com.alibaba.dubbo.rpc.protocol.thrift;
 
+import com.alibaba.dubbo.rpc.examples.DemoImpl;
 import com.alibaba.dubbo.rpc.gen.dubbo.$__DemoStub;
 import com.alibaba.dubbo.rpc.gen.dubbo.Demo;
 
diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftCodecTest.java b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftCodecTest.java
index 97e1ba6bef..b8da001bf6 100644
--- a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftCodecTest.java
+++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftCodecTest.java
@@ -372,7 +372,7 @@ public void testEncodeExceptionResponse() throws Exception {
         Assert.assertEquals("echoString", message.name);
         Assert.assertEquals(TMessageType.EXCEPTION, message.type);
         Assert.assertEquals(ThriftCodec.getSeqId(), message.seqid);
-        TApplicationException exception = TApplicationException.read(protocol);
+        TApplicationException exception = TApplicationException.readFrom(protocol);
         protocol.readMessageEnd();
 
         Assert.assertEquals(exceptionMessage, exception.getMessage());
diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-consumer.xml b/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-consumer.xml
index 752b933bd4..9051b6fa50 100644
--- a/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-consumer.xml
+++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-consumer.xml
@@ -23,7 +23,7 @@
 
     <dubbo:application name="dubbo-demo-consumer"/>
 
-    <dubbo:registry address="multicast://224.5.6.7:1234"/>
+    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
 
     <dubbo:protocol name="thrift"/>
 
diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-provider.xml b/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-provider.xml
index 085ceafb63..02eeaee78f 100644
--- a/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-provider.xml
+++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-provider.xml
@@ -23,12 +23,12 @@
 
     <dubbo:application name="dubbo-demo-provider"/>
 
-    <dubbo:registry address="multicast://224.5.6.7:1234"/>
+    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
 
     <dubbo:protocol id="thrift" name="thrift"/>
 
-    <bean id="demoService" class="com.alibaba.dubbo.rpc.protocol.thrift.ThriftDemoImpl"/>
+    <bean id="demoService" class="com.alibaba.dubbo.rpc.examples.ThriftDemoImpl"/>
 
-    <dubbo:service protocol="thrift" interface="com.alibaba.dubbo.rpc.gen.thrift.Demo$Iface" ref="demoService"/>
+    <dubbo:service protocol="thrift" nativethrift="true" interface="com.alibaba.dubbo.rpc.gen.thrift.Demo$Iface" ref="demoService"/>
 
 </beans>
\ No newline at end of file
diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/thrift/Demo.thrift b/dubbo-rpc/dubbo-rpc-thrift/src/test/thrift/Demo.thrift
index 91a264a525..c909c76eda 100644
--- a/dubbo-rpc/dubbo-rpc-thrift/src/test/thrift/Demo.thrift
+++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/thrift/Demo.thrift
@@ -2,8 +2,9 @@ namespace dubbo_java com.alibaba.dubbo.rpc.gen.dubbo
 namespace dubbo_cpp  com.alibaba.dubbo.rpc.gen.dubbo
 
 namespace java com.alibaba.dubbo.rpc.gen.thrift
-namespace cpp  com.alibaba.dubbo.rpc.gen.thrift
-
+namespace go demo
+/*Demo service define file,can be generated to inteface files*/
+/*Here test the 7 kind of data type*/
 service Demo {
     bool echoBool( 1:required bool arg );
     byte echoByte( 1:required byte arg );


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For additional commands, e-mail: notifications-help@dubbo.apache.org