From: Julien Lancelot Date: Mon, 28 Apr 2014 09:42:19 +0000 (+0200) Subject: Manage l10n message on ServerException X-Git-Tag: 4.4-RC1~1380^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d1e0a1fff65166ceaed631ebbaeb1c3d8a3c485b;p=sonarqube.git Manage l10n message on ServerException --- diff --git a/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java b/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java index 1a16244bcc8..2faf1cf4127 100644 --- a/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java +++ b/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java @@ -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 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); } diff --git a/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java b/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java index e65e6d0fc47..3a7aa81ede7 100644 --- a/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java +++ b/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java @@ -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