diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2021-04-30 19:52:54 +0200 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2021-04-30 19:52:54 +0200 |
commit | fd902f33fb92b00352fc515a8b37b5580db99387 (patch) | |
tree | 135dce41f96d304b059b7334e85bd54415378d72 | |
parent | 9ae792a7da30bb89373b8739cbe4f5ba996a1978 (diff) |
Sort mappers according to class hierarchy to match most specific mapper
-rw-r--r-- | configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java | 2 | ||||
-rw-r--r-- | container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java | 6 |
2 files changed, 5 insertions, 3 deletions
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java index 9913de3e017..a6cf6d24c88 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java @@ -83,7 +83,7 @@ public class TenantHandlerTest { public void testTenantCreateWithAllPossibleCharactersInName() throws Exception { TenantName tenantName = TenantName.from("aB-9999_foo"); assertNull(tenantRepository.getTenant(tenantName)); - assertResponse(PUT, "/application/v2/tenant/aB-999;9_foo", + assertResponse(PUT, "/application/v2/tenant/aB-9999_foo", "{\"message\":\"Tenant " + tenantName + " created.\"}"); } 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 e5da3e52165..29f1c2d294b 100644 --- a/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java +++ b/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java @@ -14,6 +14,7 @@ import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.util.ArrayList; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.ListIterator; @@ -151,11 +152,12 @@ class RestApiImpl implements RestApi { private static List<ExceptionMapperHolder<?>> combineWithDefaultExceptionMappers( List<ExceptionMapperHolder<?>> configuredExceptionMappers, boolean disableDefaultMappers) { - List<ExceptionMapperHolder<?>> exceptionMappers = new ArrayList<>(); + List<ExceptionMapperHolder<?>> exceptionMappers = new ArrayList<>(configuredExceptionMappers); if (!disableDefaultMappers){ exceptionMappers.add(new ExceptionMapperHolder<>(RestApiException.class, (context, exception) -> exception.response())); } - exceptionMappers.addAll(configuredExceptionMappers); + // Topologically sort children before superclasses, so most the specific match is found by iterating through mappers in order. + exceptionMappers.sort((a, b) -> a.type.isAssignableFrom(b.type) ? 1 : b.type.isAssignableFrom(a.type) ? -1 : 0); return exceptionMappers; } |