`
zb_86
  • 浏览: 43159 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

thrift tutorial --version 0.8 by java上InvalidOperation异常未被client抛出

    博客分类:
  • java
 
阅读更多

走thrift tutorial得例子:

发现一个问题,在client发送 (1 DIVIDE 0):{
     work.op = Operation.DIVIDE;
     work.num1 = 1;
     work.num2 = 0;
     } 这种请求得时候,server本来应该返回InvalidOperation异常,client捕获。但是Server确实返回了,但是client并没有得到异常,而是success。

跟踪代码,发现server确实write 了异常到struct中,但是client read得时候,也read成功,不过在Calculator.java得2523行得“struct.setSuccessIsSet(true);”这行代码执行后,read返回得结果会根据isSuccessIsSet来返回结果,所以因此虽然server返回了异常InvalidOperation,但是因为isSuccessIsSet=true,所以client得“int quotient = client.calculate(1, work);” 不会抛出异常,直接返回success得默认值0.

见代码:
     public void read(org.apache.thrift.protocol.TProtocol iprot, calculate_result struct) throws org.apache.thrift.TException {
        System.out.println("calculate_resultStandardScheme read start!!!!!!!!");
        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
              System.out.println("calculate_resultStandardScheme read 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;
            case 1: // OUCH
              System.out.println("calculate_resultStandardScheme read OUCH!!!!!!!!");
              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
                struct.ouch = new InvalidOperation();
                struct.ouch.read(iprot);
                struct.setOuchIsSet(true);
                System.out.println("calculate_resultStandardScheme read OUCH111111");
              } 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();
        
          System.out.println("calculate_resultStandardScheme struct:" + struct);
        // check for required fields of primitive type, which can't be checked in the validate method
        struct.validate();
      }

分享到:
评论

相关推荐

    thrift php教程thrift-tutorial-php-master.zip

    在本教程"thrift php教程thrift-tutorial-php-master.zip"中,我们将深入学习如何使用Thrift与PHP进行交互。 首先,Thrift的接口定义语言(IDL)是其核心特性之一,它允许我们以类似协议缓冲区(protobuf)的方式...

    Thrift--JSClient

    标题中的“Thrift--JSClient”指的是Apache Thrift在JavaScript客户端的使用。Apache Thrift是一种软件框架,用于构建跨语言的服务。它通过定义一个中间表示(IDL,接口定义语言)来构建服务,然后自动生成各种编程...

    Thrift-java学习小结

    服务端抛出的异常会被封装成TException,客户端接收到时可以根据异常类型进行处理。 八、Thrift工具集 除了编译器,Thrift还提供了其他工具,如thrift-gen用于生成代码,thrift-test用于测试服务,以及thrift-...

    thrift-tutorial-delphi-master.zip

    个人经导师指导并认可通过的高分项目,评审分98分。主要针对计算机相关专业和需要项目实战练习的学习者,也可作为课程设计、期末大作业。

    Spring集成Thrift--Server AND Client

    - 异常处理:Thrift会抛出特定的异常,如`TTransportException`和`TApplicationException`,需要适当地捕获和处理。 - 性能优化:可以通过调整Thrift的传输层(如TFramedTransport或TBufferedTransport)和协议层...

    用C#和C++写的Apache Thrift的小范例

    http://chanian.com/2010/05/13/thrift-tutorial-a-php-client/ 原教程使用的是c++ server和php client. 我用c++和c#分别实现了client和server,他们之间可以用任意组合互相调用,没有太复杂的功能,非常利于初学...

    maven-thrift-plugin-0.1.11-sources.jar

    maven-thrift-plugin-0.1.11-sources.jar

    thrift-0.9.1.exe和thrift-0.9.2.exe

    然后,通过运行`thrift-0.9.x.exe`,我们可以指定`.thrift`文件和目标语言,如Java、Python、C++等,生成相应的服务端和客户端代码。例如,在命令行中,我们可能会输入: ```bash thrift-0.9.x.exe --gen java my_...

    maven-thrift-plugin-0.1.11.jar

    maven-thrift-plugin-0.1.11.jar

    maven-thrift-client

    【 Maven 和 Thrift 的结合:maven-thrift-client】 在软件开发中,Thrift 是一个强大的跨语言服务开发框架,由 Facebook 开发并开源。它允许开发者定义服务接口和服务数据类型,然后自动生成多种编程语言的客户端...

    cassandra-thrift

    cassandra-thrift cassandra-thrift cassandra-thrift cassandra-thrift cassandra-thrift cassandra-thrift

    maven-thrift-plugin-0.1.10

    maven插件 maven-thrift-plugin-0.1.10

    maven-thrift-server

    【 Maven-Thrift-Server:构建Thrift服务的Maven实践】 在软件开发中,Thrift是一种高效的跨语言服务开发框架,由Facebook开发并开源。它允许定义数据类型和服务接口,然后自动生成各种编程语言的代码,使得不同...

    yii2-thrift-test-client-java:Java中的Thrift客户端样本以进行yii2-thrift扩展

    Java中的yii2-thrift客户端测试 用法 要运行,请先安装Maven mvn install 然后启动应用程序 然后跑 java -jar target/yii2-thrift-test-client-java-1.0-SNAPSHOT-jar-with-dependencies.jar

    thrift-0.13.0.zip

    "thrift-0.13.0.zip"这个压缩包包含了Thrift 0.13.0版本的源码和工具,用于生成Go语言的Thrift接口。Thrift IDL文件描述了HBase服务的接口,包括批量读写操作。批量操作在HBase中是非常重要的,因为它们可以显著提高...

    Laravel开发-thrift-laravel

    总结,Laravel开发与Thrift-Laravel的结合,让开发者能够充分利用Laravel的便利性和Thrift的高性能特性,构建出可扩展、易于维护的分布式系统。通过理解和掌握Thrift-Laravel,开发者可以提升服务之间的通信效率,...

    thrift-master-0.9.3-for-vs2013-vs2015

    thrift 0.9.3 for vs2013/vs2015 直接打开 thrift-master-0.9.3\lib\cppVS2013\thrift.sln thrift-master-0.9.3\lib\cppVS2015\thrift.sln 编译即可

    thrift-0.9.3.exe

    在Java环境下,`thrift-0.9.3.exe`会生成对应的Java源代码,包括服务接口类、服务处理类、结构体类以及必要的序列化和反序列化代码。服务接口类定义了服务的方法签名,服务处理类则包含这些方法的实际实现。结构体类...

    java 通过thrift-0.9.1读取hbase表数据

    本主题将详细探讨如何利用Java通过Thrift-0.9.1版本来读取HBase表数据。 HBase是一个基于Google Bigtable设计的开源NoSQL数据库,它构建在Hadoop之上,提供高可靠性、高性能、分布式的行存储。HBase支持实时读写,...

Global site tag (gtag.js) - Google Analytics