From b11fbcc3c678788022d8a46762dcd5c0096e106b Mon Sep 17 00:00:00 2001 From: Ivan Martiniak Date: Mon, 12 Sep 2022 07:20:49 +0200 Subject: [PATCH] Fix web pattern propagation Adding additional "contextPath" to URL patterns caused its doubling. For instance, the pattern "apidoc/openapi3/apis/single" was represented as "/apidoc/apidoc/openapi3/apis/single". New whiteboard implementation adds this "contextPath" automatically, because of its specification in the constant HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_PATH. This is the difference against older pax-web implementation. JIRA: AAA-230 Change-Id: I969706594f8cae10781d7a251cc689454982b83e Signed-off-by: Ivan Martiniak Signed-off-by: Robert Varga --- .../aaa/web/osgi/WhiteboardWebServer.java | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/web/impl-osgi/src/main/java/org/opendaylight/aaa/web/osgi/WhiteboardWebServer.java b/web/impl-osgi/src/main/java/org/opendaylight/aaa/web/osgi/WhiteboardWebServer.java index 25ac9a72a..6c29ae6e6 100644 --- a/web/impl-osgi/src/main/java/org/opendaylight/aaa/web/osgi/WhiteboardWebServer.java +++ b/web/impl-osgi/src/main/java/org/opendaylight/aaa/web/osgi/WhiteboardWebServer.java @@ -128,7 +128,7 @@ public final class WhiteboardWebServer implements WebServer { // 3. Filters - because subsequent servlets should already be covered by the filters for (var filter : webContext.filters()) { - final var props = filterProperties(contextPath, contextSelect, filter); + final var props = filterProperties(contextSelect, filter); LOG.debug("Registering filter {} with properties {}", filter, props); builder.add(bundleContext.registerService(Filter.class, filter.filter(), FrameworkUtil.asDictionary(props))); @@ -136,7 +136,7 @@ public final class WhiteboardWebServer implements WebServer { // 4. Servlets - 'bout time for 'em by now, don't you think? ;) for (var servlet : webContext.servlets()) { - final var props = servletProperties(contextPath, contextSelect, servlet); + final var props = servletProperties(contextSelect, servlet); LOG.debug("Registering servlet {} with properties {}", servlet, props); builder.add(bundleContext.registerService(Servlet.class, servlet.servlet(), FrameworkUtil.asDictionary(props))); @@ -144,7 +144,7 @@ public final class WhiteboardWebServer implements WebServer { // 5. Resources for (var resource : webContext.resources()) { - final var props = resourceProperties(contextPath, contextSelect, resource); + final var props = resourceProperties(contextSelect, resource); LOG.debug("Registering resource {} with properties {}", resource, props); builder.add(bundleContext.registerService(Object.class, WhiteboardResource.INSTANCE, FrameworkUtil.asDictionary(props))); @@ -175,14 +175,12 @@ public final class WhiteboardWebServer implements WebServer { return builder.build(); } - private static Map filterProperties(final String contextPath, final String contextSelect, - final FilterDetails filter) { + private static Map filterProperties(final String contextSelect, final FilterDetails filter) { final var builder = ImmutableMap.builder() .put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT, contextSelect) .put(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_ASYNC_SUPPORTED, filter.getAsyncSupported()) .put(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_NAME, filter.name()) - .put(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN, - absolutePatterns(contextPath, filter.urlPatterns())); + .put(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN, absolutePatterns(filter.urlPatterns())); for (var e : filter.initParams().entrySet()) { builder.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_INIT_PARAM_PREFIX + e.getKey(), e.getValue()); @@ -191,23 +189,20 @@ public final class WhiteboardWebServer implements WebServer { return builder.build(); } - private static Map resourceProperties(final String contextPath, final String contextSelect, - final ResourceDetails resource) { + private static Map resourceProperties(final String contextSelect, final ResourceDetails resource) { final var path = absolutePath(resource.name()); return Map.of( HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT, contextSelect, - HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PATTERN, contextPath + absolutePath(resource.alias()), + HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PATTERN, path, HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PREFIX, path); } - private static Map servletProperties(final String contextPath, final String contextSelect, - final ServletDetails servlet) { + private static Map servletProperties(final String contextSelect, final ServletDetails servlet) { final var builder = ImmutableMap.builder() .put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT, contextSelect) .put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_ASYNC_SUPPORTED, servlet.getAsyncSupported()) .put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_NAME, servlet.name()) - .put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, - absolutePatterns(contextPath, servlet.urlPatterns())); + .put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, absolutePatterns(servlet.urlPatterns())); for (var e : servlet.initParams().entrySet()) { builder.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_INIT_PARAM_PREFIX + e.getKey(), e.getValue()); @@ -220,13 +215,12 @@ public final class WhiteboardWebServer implements WebServer { return path.startsWith("/") ? path : "/" + path; } - private static List absolutePatterns(final String contextPath, final List urlPatterns) { + private static List absolutePatterns(final List urlPatterns) { return urlPatterns.stream() // Reject duplicates .distinct() // Ease of debugging .sorted() - .map(urlPattern -> contextPath + urlPattern) .collect(Collectors.toUnmodifiableList()); } } -- 2.36.6