@Override public Response toResponse(Exception exception) { HttpRequest httpRequest = ResteasyProviderFactory.getContextData(HttpRequest.class); // 当为rpc调用时,序列化异常 if (httpRequest != null && RestfulUtil.isRpcRequest(httpRequest.getMutableHeaders())) { return RestfulUtil.serializeError(exception); } return Response.status(Status.INTERNAL_SERVER_ERROR).entity(exception.getMessage()).build(); }
@Override public Object invoke(HttpRequest request, HttpResponse httpResponse, Object resource) throws Failure, ApplicationException { if (!Provider.class.isInstance(resource)) { return super.invoke(request, httpResponse, resource); } Object[] args = injectArguments(request, httpResponse); RestfulContainerRequest req = new RestfulContainerRequest(); req.setInterfaceName(method.getResourceClass().getClazz().getName()); req.setMethodName(method.getMethod().getName()); req.setParamtersDesc(ReflectUtil.getMethodParamDesc(method.getMethod())); req.setArguments(args); req.setHttpRequest(request); req.setAttachments(RestfulUtil.decodeAttachments(request.getMutableHeaders())); try { Response resp = Provider.class.cast(resource).call(req); RestfulUtil.encodeAttachments(httpResponse.getOutputHeaders(), resp.getAttachments()); return resp.getValue(); } catch (Exception e) { if (e != null && e instanceof RuntimeException) { throw (RuntimeException) e; } throw new InternalServerErrorException("provider call process error:" + e.getMessage(), e); } }
@Override public MultivaluedMap<String, String> getMutableHeaders() { return delegate.getMutableHeaders(); }
if (context.getHeaders().containsKey(HttpHeaders.VARY)) { for (Object varyHeader : context.getHeaders().get(HttpHeaders.VARY)) { if (request.getMutableHeaders().containsKey(varyHeader)) { varyHeaders.addAll((String) varyHeader, request.getMutableHeaders().get(varyHeader));
@Override public MultivaluedMap<String, String> getMutableHeaders() { return delegate.getMutableHeaders(); }
@Override public MultivaluedMap<String, String> getMutableHeaders() { return delegate.getMutableHeaders(); }
public MediaType selectResponseType() { String format = uriInfo.getQueryParameters().getFirst(CASLoginProtocol.FORMAT_PARAM); if (format != null && !format.isEmpty()) { //if parameter is set, it overrides all header values (see spec section 2.5.1) request.getMutableHeaders().putSingle(HttpHeaders.ACCEPT, "application/" + format.toLowerCase()); } try { Variant variant = restRequest.selectVariant(Variant.mediaTypes(MediaType.APPLICATION_XML_TYPE, MediaType.APPLICATION_JSON_TYPE).build()); return variant == null ? MediaType.APPLICATION_XML_TYPE : variant.getMediaType(); } catch (BadRequestException e) { //the default Accept header set by java.net.HttpURLConnection is invalid (cf. RESTEASY-960) return MediaType.APPLICATION_XML_TYPE; } } }