From 115f46f4faf497adfcc27d6e6baa73e71408979d Mon Sep 17 00:00:00 2001 From: Vyacheslav Rusakov Date: Mon, 22 Aug 2016 04:17:20 +0700 Subject: [PATCH] avoid servlet/filter postfix cut for short names during name generation --- .../installer/feature/web/util/WebUtils.java | 11 ++-- .../web/ServletGenNameCollisionTest.groovy | 58 +++++++++++++++++++ 2 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 src/test/groovy/ru/vyarus/dropwizard/guice/web/ServletGenNameCollisionTest.groovy diff --git a/src/main/java/ru/vyarus/dropwizard/guice/module/installer/feature/web/util/WebUtils.java b/src/main/java/ru/vyarus/dropwizard/guice/module/installer/feature/web/util/WebUtils.java index 8ad714c91..9f018839a 100644 --- a/src/main/java/ru/vyarus/dropwizard/guice/module/installer/feature/web/util/WebUtils.java +++ b/src/main/java/ru/vyarus/dropwizard/guice/module/installer/feature/web/util/WebUtils.java @@ -25,7 +25,7 @@ private WebUtils() { * For example, for class "MyCoolFilter" generated name will be ".mycool". * * @param filter filter annotation - * @param type filter type + * @param type filter type * @return filter name or generated name if name not provided */ public static String getFilterName(final WebFilter filter, final Class type) { @@ -34,9 +34,8 @@ public static String getFilterName(final WebFilter filter, final Class type) { @@ -101,8 +100,10 @@ private static String getAsyncMarker(final boolean async) { private static String generateName(final Class type, final String keyword) { String probe = '.' + type.getSimpleName().toLowerCase(); - if (probe.endsWith(keyword)) { - probe = probe.substring(0, probe.length() - keyword.length()); + final int targetLength = probe.length() - keyword.length(); + // leave prefix if remaining part is too short (and if target name equal prefix) + if (probe.endsWith(keyword) && targetLength > 2) { + probe = probe.substring(0, targetLength); } return probe; } diff --git a/src/test/groovy/ru/vyarus/dropwizard/guice/web/ServletGenNameCollisionTest.groovy b/src/test/groovy/ru/vyarus/dropwizard/guice/web/ServletGenNameCollisionTest.groovy new file mode 100644 index 000000000..46a83b599 --- /dev/null +++ b/src/test/groovy/ru/vyarus/dropwizard/guice/web/ServletGenNameCollisionTest.groovy @@ -0,0 +1,58 @@ +package ru.vyarus.dropwizard.guice.web + +import io.dropwizard.Application +import io.dropwizard.Configuration +import io.dropwizard.setup.Bootstrap +import io.dropwizard.setup.Environment +import org.eclipse.jetty.servlet.ServletHolder +import ru.vyarus.dropwizard.guice.GuiceBundle +import ru.vyarus.dropwizard.guice.test.spock.UseGuiceyApp +import spock.lang.Specification + +import javax.inject.Inject +import javax.servlet.annotation.WebServlet +import javax.servlet.http.HttpServlet + + +/** + * @author Vyacheslav Rusakov + * @since 22.08.2016 + */ +@UseGuiceyApp(GCollApp) +class ServletGenNameCollisionTest extends Specification { + + @Inject + Environment environment + + def "Check servlet name generation"() { + + expect: "OServlet name without postfix cut" + ServletHolder oservlet = environment.getApplicationContext().getServletHandler().getServlet(".oservlet") + oservlet.registration.className == OServlet.name + + and: "Servlet name without postfix cut" + ServletHolder servlet = environment.getApplicationContext().getServletHandler().getServlet(".servlet") + servlet.registration.className == Servlet.name + } + + static class GCollApp extends Application { + @Override + void initialize(Bootstrap bootstrap) { + bootstrap.addBundle(GuiceBundle.builder() + .useWebInstallers() + .extensions(OServlet, Servlet) + .build()) + } + + @Override + void run(Configuration configuration, Environment environment) throws Exception { + + } + } + + @WebServlet("/foo") + static class OServlet extends HttpServlet {} + + @WebServlet("/bar") + static class Servlet extends HttpServlet {} +} \ No newline at end of file