Esempio n. 1
0
  protected ServerResponse invokeOnTarget(
      HttpRequest request, HttpResponse response, Object target) {
    if (validator != null) {
      violationsContainer = new ViolationsContainer<Object>(validator.validate(target));
      request.setAttribute(ViolationsContainer.class.getName(), violationsContainer);
      request.setAttribute(GeneralValidator.class.getName(), validator);
    }

    PostMatchContainerRequestContext requestContext =
        new PostMatchContainerRequestContext(request, this);
    for (ContainerRequestFilter filter : requestFilters) {
      try {
        filter.filter(requestContext);
      } catch (IOException e) {
        throw new RuntimeException(e);
      }
      ServerResponse serverResponse = (ServerResponse) requestContext.getResponseAbortedWith();
      if (serverResponse != null) {
        return prepareResponse(serverResponse);
      }
    }

    Object rtn = null;
    try {
      rtn = methodInjector.invoke(request, response, target);
    } catch (WebApplicationException wae) {
      prepareResponse(ServerResponse.convertToServerResponse(wae.getResponse()));
      throw wae;
    }

    if (violationsContainer != null && violationsContainer.size() > 0) {
      throw new ResteasyViolationExceptionExtension(violationsContainer);
    }

    if (request.isSuspended()) {
      AbstractAsynchronousResponse asyncResponse =
          (AbstractAsynchronousResponse) request.getAsynchronousResponse();
      if (asyncResponse == null) return null;
      asyncResponse.setAnnotations(method.getAnnotations());
      asyncResponse.setWriterInterceptors(writerInterceptors);
      asyncResponse.setResponseFilters(responseFilters);
      return null;
    }
    if (rtn == null || method.getReturnType().equals(void.class)) {
      return prepareResponse((ServerResponse) Response.noContent().build());
    }
    if (Response.class.isAssignableFrom(method.getReturnType()) || rtn instanceof Response) {
      return prepareResponse(ServerResponse.convertToServerResponse((Response) rtn));
    }

    Response.ResponseBuilder builder = Response.ok(rtn);
    builder.type(resolveContentType(request, rtn));
    ServerResponse jaxrsResponse = (ServerResponse) builder.build();
    jaxrsResponse.setGenericType(genericReturnType);
    return prepareResponse(jaxrsResponse);
  }