]> source.dussan.org Git - sonarqube.git/commitdiff
Fix conflict of Java web services with RoR development mode
authorSimon Brandhof <simon.brandhof@gmail.com>
Wed, 22 Jan 2014 09:28:42 +0000 (10:28 +0100)
committerSimon Brandhof <simon.brandhof@gmail.com>
Wed, 22 Jan 2014 09:28:54 +0000 (10:28 +0100)
sonar-server/src/main/java/org/sonar/server/ws/ServletResponse.java
sonar-server/src/main/webapp/WEB-INF/app/controllers/api/java_ws_controller.rb
sonar-server/src/main/webapp/WEB-INF/gems/gems/actionpack-2.3.15/lib/action_controller/base.rb
sonar-server/src/main/webapp/WEB-INF/gems/gems/actionpack-2.3.15/lib/action_controller/reloader.rb

index d5b001b2f5744a8e3c9979bf304bc7762c1f2d3a..0a2354f87b7cc90949bf8f2005cc8a1f05ad15f2 100644 (file)
@@ -35,6 +35,7 @@ import java.io.StringWriter;
 public class ServletResponse implements Response {
 
   private final HttpServletResponse source;
+  private int httpStatus = 200;
 
   public ServletResponse(HttpServletResponse hsr) {
     this.source = hsr;
@@ -42,7 +43,7 @@ public class ServletResponse implements Response {
 
   @Override
   public JsonWriter newJsonWriter() {
-    return JsonWriter.of(new Buffer(source));
+    return JsonWriter.of(new Buffer());
   }
 
   @Override
@@ -70,24 +71,19 @@ public class ServletResponse implements Response {
 
   @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) {
index 8ff82b92ebf6f0058d4930378345ba6a1631e17a..212c235297dd7c931e2ac13c0d67be865ee94280 100644 (file)
@@ -41,7 +41,7 @@ class Api::JavaWsController < Api::ApiController
     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
index 41a8a64ad26e9bbd7f8514731698d947dafe21b2..144743f99147f4d6f5a6b69b40157c10333b18b4 100644 (file)
@@ -972,7 +972,11 @@ module ActionController #:nodoc:
             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)
index 709d88a37be97d0d64225ede1901790255f19186..a6f77484ab130580de30154022f8072836d590fc 100644 (file)
@@ -28,7 +28,10 @@ module ActionController
     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
@@ -46,7 +49,9 @@ module ActionController
         # run our cleanup code.
         [status, headers, BodyWrapper.new(body, lock)]
       rescue Exception
-        lock.unlock
+        #sonar
+        #lock.unlock
+        #/sonar
         raise
       end
     end