diff options
-rw-r--r-- | server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java | 21 | ||||
-rw-r--r-- | server/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java | 16 |
2 files changed, 28 insertions, 9 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java b/server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java index a2a84298456..98cdcbd332e 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java @@ -44,12 +44,12 @@ import org.sonarqube.ws.MediaTypes; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Strings.isNullOrEmpty; -import static java.lang.String.format; import static org.apache.commons.lang.StringUtils.substring; import static org.apache.commons.lang.StringUtils.substringAfterLast; import static org.apache.commons.lang.StringUtils.substringBeforeLast; import static org.sonar.server.ws.RequestVerifier.verifyRequest; import static org.sonar.server.ws.ServletRequest.SUPPORTED_MEDIA_TYPES_BY_URL_SUFFIX; +import static org.sonar.server.ws.WsUtils.checkFound; /** * @since 4.2 @@ -95,7 +95,8 @@ public class WebServiceEngine implements LocalConnector, Startable { public void execute(Request request, Response response) { try { ActionExtractor actionExtractor = new ActionExtractor(request.getPath()); - WebService.Action action = getAction(actionExtractor.getController(), actionExtractor.getAction()); + WebService.Action action = getAction(actionExtractor); + checkFound(action, "Unknown url : %s", request.getPath()); if (request instanceof ValidatingRequest) { ((ValidatingRequest) request).setAction(action); ((ValidatingRequest) request).setLocalConnector(this); @@ -123,12 +124,12 @@ public class WebServiceEngine implements LocalConnector, Startable { } } - private WebService.Action getAction(String controllerPath, String actionKey) { + @CheckForNull + private WebService.Action getAction(ActionExtractor actionExtractor) { + String controllerPath = actionExtractor.getController(); + String actionKey = actionExtractor.getAction(); WebService.Controller controller = context.controller(controllerPath); - checkArgument(controller != null, format("Unknown controller: %s", controllerPath)); - WebService.Action action = controller.action(actionKey); - checkArgument(action != null, format("Unknown action: %s/%s", controllerPath, actionKey)); - return action; + return controller == null ? null : controller.action(actionKey); } private void sendErrors(Response response, int status, Errors errors) { @@ -164,8 +165,10 @@ public class WebServiceEngine implements LocalConnector, Startable { private final String controller; private final String action; private final String extension; + private final String path; ActionExtractor(String path) { + this.path = path; String pathWithoutExtension = substringBeforeLast(path, POINT); this.controller = extractController(pathWithoutExtension); this.action = substringAfterLast(pathWithoutExtension, SLASH); @@ -193,6 +196,10 @@ public class WebServiceEngine implements LocalConnector, Startable { String getExtension() { return extension; } + + String getPath() { + return path; + } } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java b/server/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java index fa0b808b519..136d4ffc18a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java @@ -122,7 +122,18 @@ public class WebServiceEngineTest { DumbResponse response = new DumbResponse(); underTest.execute(request, response); - assertThat(response.stream().outputAsString()).isEqualTo("{\"errors\":[{\"msg\":\"Unknown controller: api/xxx\"}]}"); + assertThat(response.stream().outputAsString()).isEqualTo("{\"errors\":[{\"msg\":\"Unknown url : /api/xxx/health\"}]}"); + assertThat(response.stream().status()).isEqualTo(404); + } + + @Test + public void bad_controller_with_no_action() { + ValidatingRequest request = new TestRequest().setMethod("GET").setPath("/api/bad"); + DumbResponse response = new DumbResponse(); + underTest.execute(request, response); + + assertThat(response.stream().outputAsString()).isEqualTo("{\"errors\":[{\"msg\":\"Unknown url : /api/bad\"}]}"); + assertThat(response.stream().status()).isEqualTo(404); } @Test @@ -131,7 +142,8 @@ public class WebServiceEngineTest { DumbResponse response = new DumbResponse(); underTest.execute(request, response); - assertThat(response.stream().outputAsString()).isEqualTo("{\"errors\":[{\"msg\":\"Unknown action: api/system/xxx\"}]}"); + assertThat(response.stream().outputAsString()).isEqualTo("{\"errors\":[{\"msg\":\"Unknown url : /api/system/xxx\"}]}"); + assertThat(response.stream().status()).isEqualTo(404); } @Test |