关于用 apache cxf中对于不是返回200错误的处理 ,获取错误描述文本的方法
2013-07-30 10:54
375 查看
现象:
我们在使用apache cxf框架的时候遇到了一些问题,一般来说,如果我们用rest client 如果处理的返回是正确的,那么我们可以很轻易的处理,但是如果我们如果返回的请求返回码不是200,这种情况我们在调试时候发现exception对象中并不包含任何error message的文本:
比如类似这个截图的请求(我们用restclient)测试的,这个返回码是400,返回的响应中有error description字段,我们想要获取这个字段的内容,但是我们尝试了很多次,不能直接从exception对象中获取,也就是说没有一个类似的字段或者API
方法可以直接拿到。
我们的尝试(debug)截图如下:
从这里可以非常明显的看出来,这里没有任何一个字段可以直接拿到和我们的description那段文本相应的内容,所以我们的尝试失败了。
新的突破:
我们一位优秀的工程师想出了一个好办法,其实这个内容并不是没有,而是不直接,其实这段内容已经返回了,它的内容是以字节流的形式放在了response.entity字段中,我们可以从上文的截图中看到,这个response.entity对应的内容是一个HttpURLConnection$HttpInputStream的一个内部类的实例,所以我们必须打开这个字节流然后从中去构造我们所需要的内容。
解决方案如下:
在我们的catch()异常处理分支中:
上面的code中存在一些的隐患, in.available() 这个方法返回的是该 InputStream 字节流中所有的字节长度, 可是如果该字节流非常大的话(大到超过int范围呢). 所以这种写法不太建议.
其实建议使用 org.apache.commons.io
library中的 IOUtils 工具类, 可以使用 IOUtils.toString(inputStream) 这样代码看起来会更加的简洁清晰.
我们在使用apache cxf框架的时候遇到了一些问题,一般来说,如果我们用rest client 如果处理的返回是正确的,那么我们可以很轻易的处理,但是如果我们如果返回的请求返回码不是200,这种情况我们在调试时候发现exception对象中并不包含任何error message的文本:
比如类似这个截图的请求(我们用restclient)测试的,这个返回码是400,返回的响应中有error description字段,我们想要获取这个字段的内容,但是我们尝试了很多次,不能直接从exception对象中获取,也就是说没有一个类似的字段或者API
方法可以直接拿到。
我们的尝试(debug)截图如下:
从这里可以非常明显的看出来,这里没有任何一个字段可以直接拿到和我们的description那段文本相应的内容,所以我们的尝试失败了。
新的突破:
我们一位优秀的工程师想出了一个好办法,其实这个内容并不是没有,而是不直接,其实这段内容已经返回了,它的内容是以字节流的形式放在了response.entity字段中,我们可以从上文的截图中看到,这个response.entity对应的内容是一个HttpURLConnection$HttpInputStream的一个内部类的实例,所以我们必须打开这个字节流然后从中去构造我们所需要的内容。
解决方案如下:
在我们的catch()异常处理分支中:
其实建议使用 org.apache.commons.io
library中的 IOUtils 工具类, 可以使用 IOUtils.toString(inputStream) 这样代码看起来会更加的简洁清晰.
相关文章推荐
- 关于用 apache cxf中对于不是返回200错误的处理 ,获取错误描述文本的方法 推荐
- “OCIEnvNlsCreate 失败,返回代码为 -1,但错误消息文本不可用”的处理方法
- “OCIEnvNlsCreate 失败,返回代码为 -1,但错误消息文本不可用”的处理方法收藏
- 在服务器上处理请求时出现未知错误。服务器返回的状态码为500。的处理方法。
- 关于程序出现ORA-04068错误的处理方法
- asp.net 无法获取的内部内容,因为该内容不是文本 的解决方法
- 关于SIGSEGV错误及处理方法
- 关于Jquery中的$.each获取各种返回类型数据的使用方法
- 关于IE7打开任何网页弹出[未处理的异常('对象不支持此属性或方法')发生在iexplorer.exe]错误调试框的解决办法
- 关于程序出现ORA-04068错误的处理方法
- macos:获取c调用错误原因的描述,,,获取当前的工作目录的方法
- 关于VC2008编译出现错误“error C2664: ” 的处理方法:
- 关于C#操作PPT时遇到的“对COM组件的调用返回了错误HRESULT E_FAIL”错误的解决方法
- 关于SIGSEGV错误及处理方法
- 关于SIGSEGV错误及处理方法
- 关于在英文Windows XP 企业版下运行出现乱码,甚至无法打开数据库的错误处理方法
- 关于linux中select对于网络关闭不返回的处理
- 对于连接Excel时“外部表不是预期的格式”错误的处理
- 关于VC2008编译出现错误“error C2664: ” 的处理方法:
- Nginx直接post请求获取静态文件 返回405错误的终极解决方法