关于用 apache cxf中对于不是返回200错误的处理 ,获取错误描述文本的方法

简介:

现象

我们在使用apache cxf框架的时候遇到了一些问题,一般来说,如果我们用rest client 如果处理的返回是正确的,那么我们可以很轻易的处理,但是如果我们如果返回的请求返回码不是200,这种情况我们在调试时候发现exception对象中并不包含任何error message的文本:



比如类似这个截图的请求(我们用restclient)测试的,这个返回码是400,返回的响应中有error description字段,我们想要获取这个字段的内容,但是我们尝试了很多次,不能直接从exception对象中获取,也就是说没有一个类似的字段或者API 方法可以直接拿到。


我们的尝试(debug)截图如下:

165530246.png

从这里可以非常明显的看出来,这里没有任何一个字段可以直接拿到和我们的description那段文本相应的内容,所以我们的尝试失败了。


新的突破:

我们一位优秀的工程师想出了一个好办法,其实这个内容并不是没有,而是不直接,其实这段内容已经返回了,它的内容是以字节流的形式放在了response.entity字段中,我们可以从上文的截图中看到,这个response.entity对应的内容是一个HttpURLConnection$HttpInputStream的一个内部类的实例,所以我们必须打开这个字节流然后从中去构造我们所需要的内容。


解决方案如下:

在我们的catch()异常处理分支中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
catch (WebApplicationException e){
   LOGGER.error( "webapplicationexception: " +e.getResponse().getStatus());  //这一行是获取status code
InputStream in = (InputStream) e.getResponse().getEntity(); //这个输入流中包含了所有的文本信息是关于error message的
byte [] buffer;
try {
     buffer=  new  byte [in.available()];
     in length;
     //打开输入流并且读取,最终将其中的内容拼成字符串
     while ((length = in.read(buffer, 0 ,buffer.length)) != - 1 ){
        output=  new  String(buffer, "UTF-8" );
      }
    } catch (IOException ex){
       LOGGER.error(ex.getMessage());
    }
}
...




本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1259805,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
消息中间件 Ubuntu Java
在Ubuntu 18.04上安装Apache Kafka的方法
在Ubuntu 18.04上安装Apache Kafka的方法
182 0
|
1月前
apache+tomcat配置多站点集群的方法
apache+tomcat配置多站点集群的方法
33 4
|
3月前
|
Ubuntu 关系型数据库 MySQL
在 Ubuntu 14.04 服务器上使用 Apache 安装 Drupal 的方法
在 Ubuntu 14.04 服务器上使用 Apache 安装 Drupal 的方法
41 0
|
3月前
|
Ubuntu Java 应用服务中间件
在Ubuntu 16.04上安装Apache Tomcat 8的方法
在Ubuntu 16.04上安装Apache Tomcat 8的方法
35 0
|
3月前
|
安全 Java 应用服务中间件
在CentOS 7上安装Apache Tomcat 8的方法
在CentOS 7上安装Apache Tomcat 8的方法
131 0
|
3月前
|
Ubuntu 安全 Java
在Ubuntu 14.04上安装Apache Tomcat 8的方法
在Ubuntu 14.04上安装Apache Tomcat 8的方法
25 0
|
3月前
|
消息中间件 存储 Ubuntu
在Ubuntu 14.04上安装Apache Kafka的方法
在Ubuntu 14.04上安装Apache Kafka的方法
20 0
|
3月前
|
关系型数据库 MySQL Linux
在 CentOS 7 服务器上安装和保护 phpMyAdmin 与 Apache 的方法
在 CentOS 7 服务器上安装和保护 phpMyAdmin 与 Apache 的方法
64 0
|
3月前
|
Java 应用服务中间件 Apache
在 Debian 服务器上安装和配置 Apache Tomcat 的方法
在 Debian 服务器上安装和配置 Apache Tomcat 的方法
55 0
|
6月前
|
Apache
apache-tika从ppt-pdf-xls读取文本
apache-tika从ppt-pdf-xls读取文本
86 0

推荐镜像

更多