]> source.dussan.org Git - sonarqube.git/commitdiff
Manage l10n message on ServerException
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Mon, 28 Apr 2014 09:42:19 +0000 (11:42 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Mon, 28 Apr 2014 09:42:19 +0000 (11:42 +0200)
sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java
sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java

index 1a16244bcc8beb25a74d0ff79fc9a74e6babd5e1..2faf1cf41270e7d3f5dc64b1052e10cd9cb36ea1 100644 (file)
@@ -90,9 +90,7 @@ public class WebServiceEngine implements ServerComponent, Startable {
     } catch (BadRequestException e) {
       sendError(e, response);
     } catch (ServerException e) {
-      // TODO support ServerException l10n messages
-      sendError(e.httpCode(), e.getMessage(), response);
-
+      sendError(e.httpCode(), message(e.getMessage(), e.l10nKey(), e.l10nParams()), response);
     } catch (Exception e) {
       // TODO implement Request.toString()
       LoggerFactory.getLogger(getClass()).error("Fail to process request " + request, e);
@@ -121,8 +119,9 @@ public class WebServiceEngine implements ServerComponent, Startable {
 
   private void sendError(BadRequestException e, ServletResponse response) {
     Collection<String> messages = Lists.newArrayList();
-    if (e.getMessage()!= null || e.l10nKey() != null) {
-      messages.add(message(e.getMessage(), e.l10nKey(), e.l10nParams()));
+    String exceptionMessage = message(e.getMessage(), e.l10nKey(), e.l10nParams());
+    if (exceptionMessage != null) {
+      messages.add(exceptionMessage);
     }
     for (Message message : e.errors()) {
       messages.add(message(message.text(), message.l10nKey(), message.l10nParams()));
@@ -139,7 +138,7 @@ public class WebServiceEngine implements ServerComponent, Startable {
     }
   }
 
-  private void sendError(int status, String message, ServletResponse response) {
+  private void sendError(int status, @Nullable String message, ServletResponse response) {
     sendErrors(response, status, message);
   }
 
index e65e6d0fc479ea5c2751c641dcbadbf9768b6234..3a7aa81ede792f931a65dc91053092d43e82eee6 100644 (file)
@@ -31,6 +31,7 @@ import org.sonar.api.server.ws.Response;
 import org.sonar.api.server.ws.WebService;
 import org.sonar.server.exceptions.BadRequestException;
 import org.sonar.server.exceptions.BadRequestException.Message;
+import org.sonar.server.exceptions.ServerException;
 import org.sonar.server.plugins.MimeTypes;
 
 import javax.annotation.CheckForNull;
@@ -246,6 +247,19 @@ public class WebServiceEngineTest {
     assertThat(response.stream().mediaType()).isEqualTo(MimeTypes.JSON);
   }
 
+  @Test
+  public void server_exception_with_i18n_message() throws Exception {
+    InternalRequest request = new SimpleRequest();
+    ServletResponse response = new ServletResponse();
+    when(i18n.message(eq(Locale.getDefault()), eq("not.found"), anyString())).thenReturn("Element is not found");
+
+    engine.execute(request, response, "api/system", "server_exception_with_i18n_message");
+
+    assertThat(response.stream().outputAsString()).isEqualTo("{\"errors\":[{\"msg\":\"Element is not found\"}]}");
+    assertThat(response.stream().httpStatus()).isEqualTo(404);
+    assertThat(response.stream().mediaType()).isEqualTo(MimeTypes.JSON);
+  }
+
   static class SystemWebService implements WebService {
     @Override
     public void define(Context context) {
@@ -309,6 +323,13 @@ public class WebServiceEngineTest {
             throw BadRequestException.of(errors);
           }
         });
+      newController.createAction("server_exception_with_i18n_message")
+        .setHandler(new RequestHandler() {
+          @Override
+          public void handle(Request request, Response response) {
+            throw new ServerException(404, null, "not.found", null);
+          }
+        });
       newController.createAction("alive")
         .setHandler(new RequestHandler() {
           @Override