aboutsummaryrefslogtreecommitdiffstats
path: root/container-core/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'container-core/src/main/java')
-rw-r--r--container-core/src/main/java/com/yahoo/restapi/ErrorResponse.java8
-rw-r--r--container-core/src/main/java/com/yahoo/restapi/RestApi.java1
-rw-r--r--container-core/src/main/java/com/yahoo/restapi/RestApiException.java17
-rw-r--r--container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java7
-rw-r--r--container-core/src/main/java/com/yahoo/restapi/RestApiRequestHandler.java2
5 files changed, 29 insertions, 6 deletions
diff --git a/container-core/src/main/java/com/yahoo/restapi/ErrorResponse.java b/container-core/src/main/java/com/yahoo/restapi/ErrorResponse.java
index d3e81a10720..1885a0c970c 100644
--- a/container-core/src/main/java/com/yahoo/restapi/ErrorResponse.java
+++ b/container-core/src/main/java/com/yahoo/restapi/ErrorResponse.java
@@ -5,6 +5,7 @@ import com.yahoo.slime.Cursor;
import com.yahoo.slime.Slime;
import static com.yahoo.jdisc.Response.Status.BAD_REQUEST;
+import static com.yahoo.jdisc.Response.Status.CONFLICT;
import static com.yahoo.jdisc.Response.Status.FORBIDDEN;
import static com.yahoo.jdisc.Response.Status.INTERNAL_SERVER_ERROR;
import static com.yahoo.jdisc.Response.Status.METHOD_NOT_ALLOWED;
@@ -24,7 +25,8 @@ public class ErrorResponse extends SlimeJsonResponse {
FORBIDDEN,
METHOD_NOT_ALLOWED,
INTERNAL_SERVER_ERROR,
- UNAUTHORIZED
+ UNAUTHORIZED,
+ CONFLICT
}
public ErrorResponse(int statusCode, String errorType, String message) {
@@ -63,4 +65,8 @@ public class ErrorResponse extends SlimeJsonResponse {
return new ErrorResponse(METHOD_NOT_ALLOWED, errorCodes.METHOD_NOT_ALLOWED.name(), message);
}
+ public static ErrorResponse conflict(String message) {
+ return new ErrorResponse(CONFLICT, errorCodes.CONFLICT.name(), message);
+ }
+
}
diff --git a/container-core/src/main/java/com/yahoo/restapi/RestApi.java b/container-core/src/main/java/com/yahoo/restapi/RestApi.java
index df05723ac14..6f5bf298de3 100644
--- a/container-core/src/main/java/com/yahoo/restapi/RestApi.java
+++ b/container-core/src/main/java/com/yahoo/restapi/RestApi.java
@@ -22,6 +22,7 @@ public interface RestApi {
static RouteBuilder route(String pathPattern) { return new RestApiImpl.RouteBuilderImpl(pathPattern); }
HttpResponse handleRequest(HttpRequest request);
+ ObjectMapper jacksonJsonMapper();
interface Builder {
Builder setObjectMapper(ObjectMapper mapper);
diff --git a/container-core/src/main/java/com/yahoo/restapi/RestApiException.java b/container-core/src/main/java/com/yahoo/restapi/RestApiException.java
index ac3aa647b87..da853f91402 100644
--- a/container-core/src/main/java/com/yahoo/restapi/RestApiException.java
+++ b/container-core/src/main/java/com/yahoo/restapi/RestApiException.java
@@ -41,7 +41,10 @@ public class RestApiException extends RuntimeException {
public HttpResponse response() { return response; }
public static class NotFoundException extends RestApiException {
- public NotFoundException() { super(ErrorResponse::notFoundError, "Not Found", null); }
+ public NotFoundException() { this(null, null); }
+ public NotFoundException(Throwable cause) { this(cause.getMessage(), cause); }
+ public NotFoundException(String message) { this(message, null); }
+ public NotFoundException(String message, Throwable cause) { super(ErrorResponse::notFoundError, message, cause); }
}
public static class MethodNotAllowed extends RestApiException {
@@ -52,12 +55,14 @@ public class RestApiException extends RuntimeException {
}
public static class BadRequest extends RestApiException {
- public BadRequest(String message) { super(ErrorResponse::badRequest, message, null); }
+ public BadRequest(String message) { this(message, null); }
+ public BadRequest(Throwable cause) { this(cause.getMessage(), cause); }
public BadRequest(String message, Throwable cause) { super(ErrorResponse::badRequest, message, cause); }
}
public static class InternalServerError extends RestApiException {
- public InternalServerError(String message) { super(ErrorResponse::internalServerError, message, null); }
+ public InternalServerError(String message) { this(message, null); }
+ public InternalServerError(Throwable cause) { this(cause.getMessage(), cause); }
public InternalServerError(String message, Throwable cause) { super(ErrorResponse::internalServerError, message, cause); }
}
@@ -65,4 +70,10 @@ public class RestApiException extends RuntimeException {
public Forbidden(String message) { super(ErrorResponse::forbidden, message, null); }
public Forbidden(String message, Throwable cause) { super(ErrorResponse::forbidden, message, cause); }
}
+
+ public static class Conflict extends RestApiException {
+ public Conflict() { this("Conflict", null); }
+ public Conflict(String message) { this(message, null); }
+ public Conflict(String message, Throwable cause) { super(ErrorResponse::conflict, message, cause); }
+ }
}
diff --git a/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java b/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java
index e6c6d7ccb62..084aa01ec40 100644
--- a/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java
+++ b/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java
@@ -70,6 +70,8 @@ class RestApiImpl implements RestApi {
}
}
+ @Override public ObjectMapper jacksonJsonMapper() { return jacksonJsonMapper; }
+
private HttpResponse dispatchToRoute(Route route, RequestContextImpl context) {
HandlerHolder<?> resolvedHandler = resolveHandler(context, route);
RequestMapperHolder<?> resolvedRequestMapper = resolveRequestMapper(resolvedHandler);
@@ -347,7 +349,10 @@ class RestApiImpl implements RestApi {
@Override public ObjectMapper jacksonJsonMapper() { return jacksonJsonMapper; }
@Override public UriBuilder uriBuilder() {
URI uri = request.getUri();
- return new UriBuilder(uri.getScheme() + "://" + uri.getHost() + ':' + uri.getPort());
+ int uriPort = uri.getPort();
+ return uriPort != -1
+ ? new UriBuilder(uri.getScheme() + "://" + uri.getHost() + ':' + uriPort)
+ : new UriBuilder(uri.getScheme() + "://" + uri.getHost());
}
private class PathParametersImpl implements RestApi.RequestContext.PathParameters {
diff --git a/container-core/src/main/java/com/yahoo/restapi/RestApiRequestHandler.java b/container-core/src/main/java/com/yahoo/restapi/RestApiRequestHandler.java
index 9fe813903dd..5640bbc5445 100644
--- a/container-core/src/main/java/com/yahoo/restapi/RestApiRequestHandler.java
+++ b/container-core/src/main/java/com/yahoo/restapi/RestApiRequestHandler.java
@@ -32,5 +32,5 @@ public abstract class RestApiRequestHandler<T extends RestApiRequestHandler<T>>
@Override public final HttpResponse handle(HttpRequest request) { return restApi.handleRequest(request); }
- protected RestApi restApi() { return restApi; }
+ public RestApi restApi() { return restApi; }
}