diff options
Diffstat (limited to 'container-core/src/main/java')
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; } } |