处理rs客户端cxf

时间:2015-11-10 10:24:33

标签: spring rest jax-rs cxf-client

我试图搜索这个,但我无法在任何地方找到解决方案。我真正想做的是我在云上实施了休息服务(第三方)。从我的应用程序中我只有一个实现的休息客户端(CXF 2.7.2)在云上调用此服务并在撤回对客户端(主要是本机移动应用程序)的响应之前进行一些处理。所以基本上它充当中间件。 基本上,我希望在中间件(rs-client)上实现一般的异常处理。 服务实现(第三方)对我来说是一个黑盒子,我无法访问他们的代码。当我使用客户端使用该服务时,我有时会得到一个带有正确消息的响应400(我终于得到一个带有消息的javax.ws.rs.BadRequestException,例如输入无效;有时在某些情况下我得到一个null作为回应。

我想要做的是处理所有可能的事情(无论如何我都能想到)这样的响应/代码情况并将它们转换为自定义异常。除此之外,我还想处理其他情况,例如超时等,并将这些转换为自定义异常并返回它以让用户使用此异常执行他们想要的操作。此外,记录错误。 我在各个地方看到可能使用handlemessage处理它,但我无法完全实现。

2 个答案:

答案 0 :(得分:0)

您的问题可以有多种方式来撰写正确的答案。但是为了帮助您迈出第一步,我会为您提供部分答案,让我们可以获得更多解决方案。但请在您的问题中提供更多信息。

如果我以正确的方式理解您的问题,您可以执行以下操作:

  • 问题的第一部分:
  

我想要做的是处理所有可能的事情(无论如何我都能想到)这样的响应/代码案例并将它们转换为自定义异常

如果您的response code is not a HTTP 200 status code可以捕获此信息并抛出自定义异常。在您知道它不是HTTP 200状态代码后,您可以选择如何处理状态代码。你可以:

  • 只是使用默认消息或
  • 抛出自定义异常
  • 您可以查找状态代码并使用a抛出自定义异常 基于状态代码的特定自定义消息。

简单的代码段:

if(yourResponse.getStatus() != Response.Status.OK.getStatusCode()){
       throw new YourCustomException(yourResponse.getStatus() + " Your message");
   }

您的自定义异常类:

public class YourCustomException extends Exception {

    private static final long serialVersionUID = 5724760031556064083L;

    public YourCustomException(){
        super();
    }

    public YourCustomException(String message){
        super(message);
    }

    public YourCustomException(String message, Throwable cause){
        super(message, cause);
    }

    public YourCustomException(Throwable cause){
        super(cause);
    }

}

答案 1 :(得分:0)

你应该给Retrofit一个试用,易于使用且重量轻的REST客户端库,它具有你正在寻找的错误处理能力。

以下是使用1.x版本https://gist.github.com/benvium/66bf24e0de80d609dac0

进行错误处理的示例

如果您坚持使用JAX-RS / CXF,那么您需要保留响应对象并在那里进行检查。 http://cxf.apache.org/docs/jax-rs-client-api.html#JAX-RSClientAPI-Handlingexceptions.1