summaryrefslogtreecommitdiffstats
path: root/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java')
-rw-r--r--container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java12
1 files changed, 9 insertions, 3 deletions
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 39dd17d3563..090e06c221f 100644
--- a/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java
+++ b/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java
@@ -21,6 +21,7 @@ import com.yahoo.security.tls.TransportSecurityUtils;
import javax.net.ssl.SSLSession;
import java.io.InputStream;
+import java.net.InetSocketAddress;
import java.net.URI;
import java.security.Principal;
import java.util.ArrayList;
@@ -76,7 +77,11 @@ class RestApiImpl implements RestApi {
resolvedRoute, requestContext, filters,
createFilterContextRecursive(resolvedRoute, requestContext, resolvedRoute.filters, null));
if (filterContext != null) {
- return filterContext.executeFirst();
+ try {
+ return filterContext.executeFirst();
+ } catch (RuntimeException e) {
+ return mapException(requestContext, e);
+ }
} else {
return dispatchToRoute(resolvedRoute, requestContext);
}
@@ -487,7 +492,7 @@ class RestApiImpl implements RestApi {
@Override public Optional<ConnectionAuthContext> connectionAuthContext() {
return sslSession().flatMap(TransportSecurityUtils::getConnectionAuthContext);
}
-
+ @Override public InetSocketAddress remoteAddress() { return (InetSocketAddress) request.getJDiscRequest().getRemoteAddress(); }
private class PathParametersImpl implements RestApi.RequestContext.PathParameters {
@Override
@@ -496,7 +501,7 @@ class RestApiImpl implements RestApi {
}
@Override public String getStringOrThrow(String name) {
return getString(name)
- .orElseThrow(() -> new RestApiException.BadRequest("Path parameter '" + name + "' is missing"));
+ .orElseThrow(() -> new RestApiException.NotFound("Path parameter '" + name + "' is missing"));
}
@Override public HttpURL.Path getFullPath() {
return pathMatcher.getPath();
@@ -554,6 +559,7 @@ class RestApiImpl implements RestApi {
@Override public RestApi.RequestContext requestContext() { return requestContext; }
@Override public String route() { return route.name != null ? route.name : route.pathPattern; }
+ @Override public void setPrincipal(Principal p) { requestContext.request.getJDiscRequest().setUserPrincipal(p); }
HttpResponse executeFirst() { return filter.filterRequest(this); }