Puc*_*uce 21 java jax-rs jersey java-ee java-ee-7
一些重载的调用请求方法,例如:get()和post(Entity<?> entity)(还有其他)SyncInvoker返回一个Response对象,而不是解组的内容.
我注意到,在get()没有文档的情况下ResponseProcessingException,而其他方法,如所有3个重载 post方法,可能会抛出一个ResponseProcessingException.
我知道这ResponseProcessingException是RuntimeException继承自的ProcessingException,但我仍然会解释这意味着该get()方法不会抛出ResponseProcessingException.
它是否正确?怎么样ClientResponseFilter?为什么比其他的呼叫请求方法(行为不同的行为put,post......)?
另外,Javadoc用于抛出的方法ResponseProcessingException说:
在接收到的HTTP响应的处理失败的情况下(例如,在过滤器中或在将响应实体数据转换为特定Java类型的实例期间).
那个部分:
或者在将响应实体数据转换为特定Java类型的实例期间
在这里似乎是错误的,因为该readEntity方法不应该被调用:
https://jersey.java.net/documentation/latest/filters-and-interceptors.html#d0e9915
这是复制和粘贴文档错误吗?
不过,我猜过滤器是一个有效的案例.
文档肯定不一致。很明显,它ResponseProcessingException是在失败时抛出的ClientResponseFilter。
我正在研究的实现(RESTEasy 3.0.16)是这样做的:
try {
filter.filter(requestContext, responseContext);
} catch (ResponseProcessingException e) {
throw e;
} catch (Throwable e) {
throw new ResponseProcessingException(response, e);
}
Run Code Online (Sandbox Code Playgroud)
当和方法声明异常时,该方法没有理由get不声明异常。在内部,它们都由相同的代码处理。putpost
我的结论是,这些方法之间的文档中的细微差别只是一个疏忽。
有趣的是,在我的源代码副本中,该get()方法的 javadoc 中有这一行:
/**
* @throws javax.ws.rs.ProcessingException
* in case the invocation processing has failed.
Run Code Online (Sandbox Code Playgroud)
虽然所有其他类似的方法(例如get(Class<T>))的记录如下:
/**
* @throws ProcessingException in case the request processing or subsequent I/O operation fails.
Run Code Online (Sandbox Code Playgroud)
引起我注意的是第一个中的完全限定类名称。只是一种预感,但这让我觉得它是在不同的时间或由不同的人放入的。也许我分析过度了。我试图查看修订历史记录,但我发现的只是一个单一的提交,其中写着“将源代码移至其自己的存储库”)。就这么多了。
然而,正如您所指出的,这不是一个错误,因为ResponseProcessingException它是 的子类,ProcessingException而且甚至不是一个受检查的异常。
| 归档时间: |
|
| 查看次数: |
2382 次 |
| 最近记录: |