【问题标题】:JAX-RS client: ResponseProcessingException handlingJAX-RS 客户端:ResponseProcessingException 处理
【发布时间】:2016-02-21 20:52:06
【问题描述】:

一些重载的调用请求方法,如:SyncInvokerget()post(Entity<?> entity)(还有其他)返回一个Response对象,而不是解组的内容。

我注意到在 get() 的情况下,没有记录在案的 ResponseProcessingException,而其他方法,例如所有 3 个重载的 post 方法,可能会抛出 ResponseProcessingException

我知道ResponseProcessingException 是一个RuntimeException,它继承自ProcessingException,但我仍然会将其解释为get() 方法不会抛出ResponseProcessingException

这是正确的吗? ClientResponseFilter 呢?为什么该行为与其他调用请求方法(putpost、..)的行为不同?

此外,抛出 ResponseProcessingException 的方法的 Javadoc 说:

如果接收到的 HTTP 响应处理失败(例如在过滤器中) 或在将响应实体数据转换为 特定的 Java 类型)。

部分:

或在将响应实体数据转换为 特定的 Java 类型

这里似乎是错误的,因为 readEntity 方法不应该被调用:

https://jersey.java.net/documentation/latest/filters-and-interceptors.html#d0e9915

这是复制和粘贴文档错误吗?

不过,我想过滤器是一个有效的案例。

【问题讨论】:

  • @BalcusC 这是一个 Java 问题,JAX-RS 是 Java EE 的一部分,而 JAX-RS 客户端是 JAVA EE 7 的一部分。请参阅 Javadoc 的链接。请不要删除这些标签。

标签: java jakarta-ee jersey jax-rs java-ee-7


【解决方案1】:

文档肯定不一致。很明显,ResponseProcessingException 旨在在 ClientResponseFilter 失败时抛出。

我正在研究的实现(RESTEasy 3.0.16)是这样做的:

try {
    filter.filter(requestContext, responseContext);
} catch (ResponseProcessingException e) {
    throw e;
} catch (Throwable e) {
    throw new ResponseProcessingException(response, e);
}

putpost 方法声明异常时,get 方法没有理由不声明异常。在内部,它们都由相同的代码处理。

我的结论是,这些方法之间的文档略有不同只是疏忽。

有趣的是,在我的源代码副本中,get() 方法的 javadoc 中有这一行:

/**
 * @throws javax.ws.rs.ProcessingException
 *          in case the invocation processing has failed.

而所有其他类似的方法(例如get(Class<T>))的记录如下:

/**
 * @throws ProcessingException         in case the request processing or subsequent I/O operation fails.

让我眼前一亮的是第一个中的完全限定类名。只是一种预感,但这让我觉得它是在不同的时间或由不同的人放入的。也许我分析过度了。我试图查看修订历史,但我发现的只是一个提交,上面写着“将源代码移动到它自己的存储库”)。就这么多。

但是,正如您所指出的,这不是错误,因为 ResponseProcessingExceptionProcessingException 的子类,并且无论如何都不是已检查异常。

【讨论】:

    【解决方案2】:

    如果你不希望你的异常被包裹在ResponseProcessingException 中,你可以让你的异常扩展它,然后它就不会被包裹。当然,这只有在使用自己的异常并且对 RuntimeException 没问题的情况下才可行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 2013-06-03
      • 2016-01-10
      相关资源
      最近更新 更多