java thrift返回List异常
对于下段代码:
public List<String> hmget(String key, List<String> fields) throws org.apache.thrift.TException
{
JedisCluster jedis_cluster = RedisClusterProxy.get_jedis_cluster();
String[] field_array = new String[fields.size()];
fields.toArray(field_array);
return jedis_cluster.hmget(key, field_array);
}
运行时遇到如下异常,原因是由于hmget返回的List<String>含有null成员,导致thrift编码时异常:
20160415 14:55:39 ERROR org.apache.thrift.server.AbstractNonblockingServer$FrameBuffer.invoke(AbstractNonblockingServer.java:484) [Thread-0] Unexpected throwable while invoking!
java.lang.NullPointerException
at org.apache.thrift.protocol.TBinaryProtocol.writeString(TBinaryProtocol.java:185)
at com.test.redis_cluster_proxy.RedisClusterProxyService$hmget_result$hmget_resultStandardScheme.write(RedisClusterProxyService.java:19434)
at com.test.redis_cluster_proxy.RedisClusterProxyService$hmget_result$hmget_resultStandardScheme.write(RedisClusterProxyService.java:1)
at com.test.redis_cluster_proxy.RedisClusterProxyService$hmget_result.write(RedisClusterProxyService.java:19337)
at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:53)
at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
at org.apache.thrift.server.AbstractNonblockingServer$FrameBuffer.invoke(AbstractNonblockingServer.java:478)
at org.apache.thrift.server.TNonblockingServer.requestInvoke(TNonblockingServer.java:115)
at org.apache.thrift.server.AbstractNonblockingServer$AbstractSelectThread.handleRead(AbstractNonblockingServer.java:209)
at org.apache.thrift.server.TNonblockingServer$SelectAcceptThread.select(TNonblockingServer.java:198)
at org.apache.thrift.server.TNonblockingServer$SelectAcceptThread.run(TNonblockingServer.java:154)
当redis中没有相应的field时,hmget返回的List<String>会包含null成员。解决此问题有两个办法:
1)保证查询的field一定存在
2)对hmget返回值做处理,null成员替换成空字符串""
java thrift返回List异常的更多相关文章
- Java中的受检异常
Java中的受检异常 Java提供了三种异常类型,受检异常(checked exception).运行时异常(runtime exception).错误(error).那么这受检异常在实际开发中又有什 ...
- java提高篇(十七)-----异常(二)
承接上篇博文:java提高篇-----异常(一) 五.自定义异常 Java确实给我们提供了非常多的异常,但是异常体系是不可能预见所有的希望加以报告的错误,所以Java允许我们自定义异常来表 ...
- Java知多少(53)使用Java创建自己的异常子类
尽管Java的内置异常处理大多数常见错误,你也许希望建立你自己的异常类型来处理你所应用的特殊情况.这是非常简单的:只要定义Exception的一个子类就可以了(Exception当然是Throwabl ...
- Spring(十八):Spring AOP(二):通知(前置、后置、返回、异常、环绕)
AspectJ支持5种类型的通知注解: @Before:前置通知,在方法执行之前执行: @After:后置通知,在方法执行之后执行: @AfterRunning:返回通知,在方法返回结果之后执行(因此 ...
- 19Spring返回通知&异常通知&环绕通知
在前置通知和后置通知的基础上加上返回通知&异常通知&环绕通知 代码: package com.cn.spring.aop.impl; //加减乘除的接口类 public interfa ...
- Java基础13一异常
1.异常概念 异常是程序在运行期发生的不正常的事件,它会打断指令的正常执行流程. 设计良好的程序应该在异常发生时提供处理这些不正常事件的方法,使程序不会因为异常的发生而阻断或产生不可预见的结果. Ja ...
- Java中返回值定义为int类型的 方法return 1返回的是int还是Integer&&finally中return问题
在Java中返回值定义为int类型的 方法return 1:中返回的是Integer值,在返回的时候基本类型值1被封装为Integer类型. 定义一个Test类,在异常处理try中和finally中分 ...
- 【读后感】《Java编程思想》~ 异常
[读后感]<Java编程思想>~异常 终于拿出压箱底的那本<Java编程思想>.这本书我年轻的时候就买了,但是翻过几页后就放弃了.没想到这两天翻了一下,真的有收获. 看了一下第 ...
- Java第二十二天,异常
异常 程序在执行过程中,出现的非正常的情况,最终会导致JVM非正常停止. 注意: 在Java等面向对象编程语言当中,异常本身是一个类,产生异常的本质就是抛出一个异常对象.Java对异常采取中断处理方式 ...
随机推荐
- SpringBoot 监控管理模块actuator没有权限的问题
SpringBoot 1.5.9 版本加入actuator依赖后, 访问/beans 等敏感的信息时候报错,如下 Tue Mar 07 21:18:57 GMT+08:00 2017 There wa ...
- ssh反向连接内网主机
holer听别人说也挺好用不过本人没试过:https://github.com/Wisdom-Projects/holer 利用autossh建立稳定隧道,前提双方互加公钥信任. # yum inst ...
- 关于HTTP协议及SOCKET通信
一.HTTP 1.报文结构 HTTP:超文本传输协议,报文分为请求报文和响应报文. 2.端口(tomcat端口) http在熟知的80端口使用TCP的服务:tomcat的默认端口是8080 3.状态码 ...
- MS-SQL
变量 一个@为局部变量,两个@@为全局变量 @@error 最后一句SQL语句的错误编号 错误码 @@identity最后一次插入的标示值符 insert into biao(lie) output ...
- php 时间操作归类
对于php时间表示有两种: 一.‘xxxx-xx-xx'这种容易分辨的格式 二.unix时间戳格式 他们的之间的转换关系是: 常规格式转时间戳 $T='2014-05-24'; $Tr=strtoti ...
- java中checked和unchecked 异常处理
有两种类型的异常:一种是checked异常一种是unchecked异常,在这篇文章中我们将利用实例来学习这两种异常,checked的异常和unchecked异常最大的区别就是checked去唱是在编译 ...
- HTML的实际演练2
1.html 换行: 如果你想在不产生新的段落下换行,就使用<br/><p>tishi is a praskdjf<br/>ldkfldj</p> 2. ...
- 删除Eclipse已有的SVN资源库位置
点击Eclipse菜单栏的[Window]->[Show View]->[Other],在弹出的对话框中,选择[SVN]->[SVN资源库],然后点击[OK]. 接着,在Eclips ...
- httplib:AttributeError: 'module' object has no attribute 'HTTPConnection'
# -*-coding:gb2312-*- #Function:学习python的httplib模块 import httplib conn = httplib.HTTPConnection(&quo ...
- 内部存储 openFileInputStream openFileOutputStream
package com.qianfeng.gp08_day24_internalstorage; import java.io.FileInputStream; import java.io.File ...