From d1e0a1fff65166ceaed631ebbaeb1c3d8a3c485b Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Mon, 28 Apr 2014 11:42:19 +0200 Subject: [PATCH] Manage l10n message on ServerException --- .../org/sonar/server/ws/WebServiceEngine.java | 11 +++++----- .../sonar/server/ws/WebServiceEngineTest.java | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+), 6 deletions(-) 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 -- 2.39.5