Resteasy(客户端代理框架)响应关闭错误,如果在具有500 HTTP状态的响应上调用readEntity

时间:2013-08-29 13:54:31

标签: web-services resteasy

使用Resteasy框架编写Web服务。

如果在服务器上处理时抛出任何异常,则需要使用HTTP 500响应向​​客户端发送错误消息。

我在WebService接口中有void方法:

public interface WebLocationService {

@DELETE
@Path("/delete")
   @Consumes(MediaType.APPLICATION_JSON)
   public void deleteLocation(LocationId locationId); { }

如果此方法抛出任何异常,则ExceptionMapper捕获它并返回响应,其中500状态和异常消息为实体。

public class WebApplicationExceptionMapper implements                 
                                     ExceptionMapper<WebApplicationException>{

@Override
public Response toResponse(WebApplicationException e) {
    return Response.serverError().entity(e.getMessage()).build();
} }

使用Resteasy客户端代理框架。

对于具有500状态的响应,客户端代理框架抛出ServerErrorException并使用它包装响应。从ServerErrorException获取响应。当我在响应时调用readEntity或getEntity时,它会抛出带有IllegalStateException的Response close错误。

调试它并找出,基于Web服务接口方法返回类型,代理框架决定EntityExtractor。

1)对于void返回类型,DefaultEntityExtractor $ 3缓冲实体输入流,然后关闭响应。

2)对于Response,Response.Status和ResponseObject,DefaultEntityExtractor $ 1,$ 2,$ 4不会关闭响应。

3)对于任何其他类型,BodyEntityExtractor是实体提取器,不会关闭响应。

0 个答案:

没有答案