aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java21
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java16
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