public class ServletResponse implements Response {
private final HttpServletResponse source;
+ private int httpStatus = 200;
public ServletResponse(HttpServletResponse hsr) {
this.source = hsr;
@Override
public JsonWriter newJsonWriter() {
- return JsonWriter.of(new Buffer(source));
+ return JsonWriter.of(new Buffer());
}
@Override
@Override
public Response setStatus(int httpStatus) {
- source.setStatus(httpStatus);
+ this.httpStatus = httpStatus;
return this;
}
- private static class Buffer extends StringWriter {
- private final HttpServletResponse httpResponse;
-
- public Buffer(HttpServletResponse httpResponse) {
- this.httpResponse = httpResponse;
- }
-
+ private class Buffer extends StringWriter {
@Override
public void close() throws IOException {
super.close();
+ source.setStatus(httpStatus);
ServletOutputStream stream = null;
try {
- stream = httpResponse.getOutputStream();
+ stream = source.getOutputStream();
IOUtils.copy(new ByteArrayInputStream(toString().getBytes(Charsets.UTF_8)), stream);
stream.flush();
} catch (IOException e) {
engine = Java::OrgSonarServerPlatform::Platform.component(Java::OrgSonarServerWs::WebServiceEngine.java_class)
engine.execute(ws_request, ws_response, params[:wspath], params[:wsaction])
- # response is already written to HttpServletResponse. No need to feed :text
- render :text => '', :status => ws_response.status(), :content_type => media_type
+ # response is already written to HttpServletResponse
+ render :nothing => true
end
end
render_for_text(generator.to_s, options[:status])
elsif options[:nothing]
- render_for_text(nil, options[:status])
+ #sonar
+ # Java web services fully handle HTTP response (status and body). See java_ws_controller.rb.
+ @performed_render = true
+ #render_for_text(nil, options[:status])
+ #/sonar
else
render_for_file(default_template, options[:status], layout)
end
def self.run(lock = @@default_lock)
- lock.lock
+ #sonar
+ # Development mode does not work with integration of Java web services (java_ws_controller.rb).
+ #lock.lock
+ #/sonar
begin
Dispatcher.reload_application
status, headers, body = yield
# run our cleanup code.
[status, headers, BodyWrapper.new(body, lock)]
rescue Exception
- lock.unlock
+ #sonar
+ #lock.unlock
+ #/sonar
raise
end
end