From 7e8baa7ca92b0e430dca90ffc3d88d9a5c10205a Mon Sep 17 00:00:00 2001 From: James Moger Date: Sun, 28 Dec 2014 12:02:55 -0500 Subject: [PATCH] Rename Router URL methods to URI methods since they do not contain Location --- .../ro/fortsoft/pippo/core/Application.java | 2 +- .../pippo/core/DefaultErrorHandler.java | 2 +- .../pippo/core/route/DefaultRouter.java | 55 ++++++++++--------- .../ro/fortsoft/pippo/core/route/Route.java | 16 +++--- .../ro/fortsoft/pippo/core/route/Router.java | 10 ++-- .../pippo/core/DefaultRouterTest.java | 25 ++++----- .../demo/controller/ContactsController.java | 6 +- .../pippo/demo/controller/ControllerDemo.java | 2 +- .../pippo/demo/crud/CrudApplication.java | 11 +++- .../freemarker/ClasspathResourceMethod.java | 4 +- .../pippo/groovy/PippoGroovyTemplate.java | 6 +- .../ro/fortsoft/pippo/jade/PippoHelper.java | 4 +- .../pebble/ClasspathResourceFunction.java | 4 +- .../pippo/trimou/ClasspathResourceHelper.java | 4 +- 14 files changed, 80 insertions(+), 71 deletions(-) diff --git a/pippo-core/src/main/java/ro/fortsoft/pippo/core/Application.java b/pippo-core/src/main/java/ro/fortsoft/pippo/core/Application.java index e64899dab..1bc9bf47d 100644 --- a/pippo-core/src/main/java/ro/fortsoft/pippo/core/Application.java +++ b/pippo-core/src/main/java/ro/fortsoft/pippo/core/Application.java @@ -203,7 +203,7 @@ void setContextPath(String contextPath) { } public void GET(ClasspathResourceHandler resourceHandler) { - if (getRouter().urlPatternFor(resourceHandler.getClass()) != null) { + if (getRouter().uriPatternFor(resourceHandler.getClass()) != null) { throw new PippoRuntimeException("You may only register one route for {}", resourceHandler.getClass().getSimpleName()); } diff --git a/pippo-core/src/main/java/ro/fortsoft/pippo/core/DefaultErrorHandler.java b/pippo-core/src/main/java/ro/fortsoft/pippo/core/DefaultErrorHandler.java index da2160378..7e5ca9897 100644 --- a/pippo-core/src/main/java/ro/fortsoft/pippo/core/DefaultErrorHandler.java +++ b/pippo-core/src/main/java/ro/fortsoft/pippo/core/DefaultErrorHandler.java @@ -141,7 +141,7 @@ protected void renderDirectly(Request request, Response response) { content.append("
  • "); content.append(route.getRequestMethod()); content.append(" "); - content.append(route.getUrlPattern()); + content.append(route.getUriPattern()); content.append("
  • "); } content.append(""); diff --git a/pippo-core/src/main/java/ro/fortsoft/pippo/core/route/DefaultRouter.java b/pippo-core/src/main/java/ro/fortsoft/pippo/core/route/DefaultRouter.java index 1aa8323f3..1c1f40db9 100644 --- a/pippo-core/src/main/java/ro/fortsoft/pippo/core/route/DefaultRouter.java +++ b/pippo-core/src/main/java/ro/fortsoft/pippo/core/route/DefaultRouter.java @@ -114,10 +114,10 @@ protected void validateRoute(Route route) throws Exception { throw new Exception("Invalid request method: " + route.getRequestMethod()); } - // validate the url pattern - String urlPattern = route.getUrlPattern(); - if (urlPattern == null || urlPattern.isEmpty()) { - throw new Exception("The url pattern cannot be null or empty"); + // validate the uri pattern + String uriPattern = route.getUriPattern(); + if (uriPattern == null || uriPattern.isEmpty()) { + throw new Exception("The uri pattern cannot be null or empty"); } } @@ -151,7 +151,7 @@ public List findRoutes(String requestUri, String requestMethod) { @Override public void addRoute(Route route) throws Exception { - log.debug("Add route for '{} {}'", route.getRequestMethod(), route.getUrlPattern()); + log.debug("Add route for '{} {}'", route.getRequestMethod(), route.getUriPattern()); validateRoute(route); routes.add(route); @@ -166,24 +166,29 @@ public void addRoute(Route route) throws Exception { } @Override - public String urlFor(String urlPattern, Map parameters) { - PatternBinding binding = getPatternBinding(urlPattern); + public String uriFor(String uri) { + return prefixContextPath(uri); + } + + @Override + public String uriFor(String uriPattern, Map parameters) { + PatternBinding binding = getPatternBinding(uriPattern); - return (binding != null) ? prefixContextPath(urlFor(binding, parameters)) : null; + return (binding != null) ? prefixContextPath(uriFor(binding, parameters)) : null; } @Override - public String urlPatternFor(Class controllerClass, String methodName) { + public String uriFor(Class controllerClass, String methodName) { Route route = getRoute(controllerClass, methodName); - return (route != null) ? route.getUrlPattern() : null; + return (route != null) ? route.getUriPattern() : null; } @Override - public String urlFor(Class controllerClass, String methodName, Map parameters) { + public String uriFor(Class controllerClass, String methodName, Map parameters) { Route route = getRoute(controllerClass, methodName); - return (route != null) ? prefixContextPath(urlFor(route.getUrlPattern(), parameters)) : null; + return (route != null) ? prefixContextPath(uriFor(route.getUriPattern(), parameters)) : null; } private Route getRoute(Class controllerClass, String methodName) { @@ -203,10 +208,10 @@ private Route getRoute(Class controllerClass, String metho } @Override - public String urlPatternFor(Class resourceHandlerClass) { + public String uriPatternFor(Class resourceHandlerClass) { Route route = getRoute(resourceHandlerClass); - return (route != null) ? route.getUrlPattern() : null; + return (route != null) ? route.getUriPattern() : null; } private Route getRoute(Class resourceHandlerClass) { @@ -225,11 +230,11 @@ private Route getRoute(Class resourceHandler private void addBinding(Route route) { - String urlPattern = route.getUrlPattern(); + String uriPattern = route.getUriPattern(); // TODO improve (it's possible to have the same urlPattern for many routes => same pattern) - String regex = getRegex(urlPattern); + String regex = getRegex(uriPattern); Pattern pattern = Pattern.compile(regex); - List parameterNames = getParameterNames(urlPattern); + List parameterNames = getParameterNames(uriPattern); PatternBinding binding = new PatternBinding(pattern, route, parameterNames); String requestMethod = route.getRequestMethod(); if (!bindingsCache.containsKey(requestMethod)) { @@ -320,12 +325,12 @@ private Map getParameters(PatternBinding binding, String request return parameters; } - private PatternBinding getPatternBinding(String urlPattern) { + private PatternBinding getPatternBinding(String uriPattern) { Iterator> iterator = bindingsCache.values().iterator(); while (iterator.hasNext()) { List bindings = iterator.next(); for (PatternBinding binding : bindings) { - if (urlPattern.equals(binding.getRoute().getUrlPattern())) { + if (uriPattern.equals(binding.getRoute().getUriPattern())) { return binding; } } @@ -334,8 +339,8 @@ private PatternBinding getPatternBinding(String urlPattern) { return null; } - private String urlFor(PatternBinding binding, Map parameters) { - String url = binding.getRoute().getUrlPattern(); + private String uriFor(PatternBinding binding, Map parameters) { + String uri = binding.getRoute().getUriPattern(); List parameterNames = binding.getParameterNames(); if (!parameters.keySet().containsAll(parameterNames)) { @@ -352,7 +357,7 @@ private String urlFor(PatternBinding binding, Map parameters) { String buffer = String.format(VARIABLE_PART_PATTERN_WITH_PLACEHOLDER, parameterPair.getKey()); Pattern pattern = Pattern.compile(buffer); - Matcher matcher = pattern.matcher(url); + Matcher matcher = pattern.matcher(uri); while (matcher.find()) { String pathValue = parameterPair.getValue().toString(); matcher.appendReplacement(sb, pathValue); @@ -360,7 +365,7 @@ private String urlFor(PatternBinding binding, Map parameters) { } matcher.appendTail(sb); - url = sb.toString(); + uri = sb.toString(); if (!foundAsPathParameter) { queryParameters.put(parameterPair.getKey(), parameterPair.getValue()); @@ -385,10 +390,10 @@ private String urlFor(PatternBinding binding, Map parameters) { } - url += "?" + query; + uri += "?" + query; } - return url; + return uri; } private class PatternBinding { diff --git a/pippo-core/src/main/java/ro/fortsoft/pippo/core/route/Route.java b/pippo-core/src/main/java/ro/fortsoft/pippo/core/route/Route.java index a28f0e59b..d87523217 100644 --- a/pippo-core/src/main/java/ro/fortsoft/pippo/core/route/Route.java +++ b/pippo-core/src/main/java/ro/fortsoft/pippo/core/route/Route.java @@ -22,18 +22,18 @@ */ public class Route implements Serializable { - private String urlPattern; + private String uriPattern; private String requestMethod; private RouteHandler routeHandler; - public Route(String urlPattern, String requestMethod, RouteHandler routeHandler) { - this.urlPattern = urlPattern; + public Route(String uriPattern, String requestMethod, RouteHandler routeHandler) { + this.uriPattern = uriPattern; this.requestMethod = requestMethod; this.routeHandler = routeHandler; } - public String getUrlPattern() { - return urlPattern; + public String getUriPattern() { + return uriPattern; } public String getRequestMethod() { @@ -52,14 +52,14 @@ public boolean equals(Object o) { Route route = (Route) o; if (!requestMethod.equals(route.requestMethod)) return false; - if (!urlPattern.equals(route.urlPattern)) return false; + if (!uriPattern.equals(route.uriPattern)) return false; return true; } @Override public int hashCode() { - int result = urlPattern.hashCode(); + int result = uriPattern.hashCode(); result = 31 * result + requestMethod.hashCode(); return result; } @@ -68,7 +68,7 @@ public int hashCode() { public String toString() { return "Route{" + "requestMethod='" + requestMethod + '\'' + - ", urlPattern='" + urlPattern + '\'' + + ", uriPattern='" + uriPattern + '\'' + '}'; } diff --git a/pippo-core/src/main/java/ro/fortsoft/pippo/core/route/Router.java b/pippo-core/src/main/java/ro/fortsoft/pippo/core/route/Router.java index 8f2f0eb2c..8e8780592 100644 --- a/pippo-core/src/main/java/ro/fortsoft/pippo/core/route/Router.java +++ b/pippo-core/src/main/java/ro/fortsoft/pippo/core/route/Router.java @@ -49,11 +49,13 @@ public interface Router { public List getRoutes(); - public String urlFor(String urlPattern, Map parameters); + public String uriFor(String uri); - public String urlFor(Class controllerClass, String methodName, Map parameters); + public String uriFor(String urlPattern, Map parameters); - public String urlPatternFor(Class controllerClass, String methodName); + public String uriFor(Class controllerClass, String methodName, Map parameters); - public String urlPatternFor(Class resourceHandlerClass); + public String uriFor(Class controllerClass, String methodName); + + public String uriPatternFor(Class resourceHandlerClass); } diff --git a/pippo-core/src/test/java/ro/fortsoft/pippo/core/DefaultRouterTest.java b/pippo-core/src/test/java/ro/fortsoft/pippo/core/DefaultRouterTest.java index 5be35a761..f5120c0ea 100644 --- a/pippo-core/src/test/java/ro/fortsoft/pippo/core/DefaultRouterTest.java +++ b/pippo-core/src/test/java/ro/fortsoft/pippo/core/DefaultRouterTest.java @@ -54,18 +54,18 @@ public void after() { } @Test - public void testNullUrlPatternRoute() throws Exception { + public void testNullUriPatternRoute() throws Exception { Route route = new Route(null, HttpConstants.Method.GET, new EmptyRouteHandler()); thrown.expect(Exception.class); - thrown.expectMessage("The url pattern cannot be null or empty"); + thrown.expectMessage("The uri pattern cannot be null or empty"); router.addRoute(route); } @Test - public void testEmptyUrlPatternRoute() throws Exception { + public void testEmptyUriPatternRoute() throws Exception { Route route = new Route("", HttpConstants.Method.GET, new EmptyRouteHandler()); thrown.expect(Exception.class); - thrown.expectMessage("The url pattern cannot be null or empty"); + thrown.expectMessage("The uri pattern cannot be null or empty"); router.addRoute(route); } @@ -168,8 +168,7 @@ public void testIntIdRoute2() throws Exception { new EmptyRouteHandler()); router.addRoute(route); - List routeMatches = router.findRoutes("/contact/3/something/borrowed", - HttpConstants.Method.GET); + List routeMatches = router.findRoutes("/contact/3/something/borrowed", HttpConstants.Method.GET); assertEquals(1, routeMatches.size()); Map pathParameters = routeMatches.get(0).getPathParameters(); @@ -272,8 +271,7 @@ public void testParametersAndRegexInsideVariableParts() throws Exception { assertEquals("robots.txt", match.getPathParameters().get("path")); // multiple parameter parsing with regex expressions - router.addRoute(new Route("/{name: .+}/photos/{id: [0-9]+}", HttpConstants.Method.GET, - new EmptyRouteHandler())); + router.addRoute(new Route("/{name: .+}/photos/{id: [0-9]+}", HttpConstants.Method.GET, new EmptyRouteHandler())); pathUnderTest = "/John/photos/2201"; matches = router.findRoutes(pathUnderTest, HttpConstants.Method.GET); @@ -292,8 +290,7 @@ public void testParametersDontCrossSlashes() throws Exception { new EmptyRouteHandler())); // this must match - assertEquals(1, router.findRoutes("/blah/id/id2/id3/morestuff/at/the/end", HttpConstants.Method.GET) - .size()); + assertEquals(1, router.findRoutes("/blah/id/id2/id3/morestuff/at/the/end", HttpConstants.Method.GET).size()); // this should not match as the last "end" is missing assertEquals(0, router.findRoutes("/blah/id/id2/id3/morestuff/at/the", HttpConstants.Method.GET).size()); @@ -405,21 +402,21 @@ public void testRouteWithUrlEncodedSlashGetsChoppedCorrectly() throws Exception } @Test - public void testUrlForWithRegex() throws Exception { + public void testUriForWithRegex() throws Exception { Route route = new Route("/user/{email}/{id: .*}", HttpConstants.Method.GET, new EmptyRouteHandler()); router.addRoute(route); Map parameters = new HashMap(); parameters.put("email", "test@test.com"); parameters.put("id", 5); - String path = router.urlFor(route.getUrlPattern(), parameters); + String path = router.uriFor(route.getUriPattern(), parameters); assertThat(path, equalTo("/user/test@test.com/5")); } @Test - public void testUrlForWithRegexAndQueryParameters() throws Exception { + public void testUriForWithRegexAndQueryParameters() throws Exception { Route route = new Route("/user/{email}/{id: .*}", HttpConstants.Method.GET, new EmptyRouteHandler()); router.addRoute(route); @@ -427,7 +424,7 @@ public void testUrlForWithRegexAndQueryParameters() throws Exception { parameters.put("email", "test@test.com"); parameters.put("id", 5); parameters.put("query", "recent_changes"); - String path = router.urlFor(route.getUrlPattern(), parameters); + String path = router.uriFor(route.getUriPattern(), parameters); assertThat(path, equalTo("/user/test@test.com/5?query=recent_changes")); } diff --git a/pippo-demo/src/main/java/ro/fortsoft/pippo/demo/controller/ContactsController.java b/pippo-demo/src/main/java/ro/fortsoft/pippo/demo/controller/ContactsController.java index f092ee7e5..0a49901bd 100644 --- a/pippo-demo/src/main/java/ro/fortsoft/pippo/demo/controller/ContactsController.java +++ b/pippo-demo/src/main/java/ro/fortsoft/pippo/demo/controller/ContactsController.java @@ -42,13 +42,13 @@ public void index() { } @Timed - public void urlFor(@Param("id") int id) { + public void uriFor(@Param("id") int id) { Map parameters = new HashMap<>(); parameters.put("id", id); parameters.put("action", "new"); - String url = getApplication().getRouter().urlFor(ContactsController.class, "urlFor", parameters); + String uri = getApplication().getRouter().uriFor(ContactsController.class, "uriFor", parameters); - getResponse().send("id = " + id + "; url = " + url); + getResponse().send("id = " + id + "; uri = " + uri); } } diff --git a/pippo-demo/src/main/java/ro/fortsoft/pippo/demo/controller/ControllerDemo.java b/pippo-demo/src/main/java/ro/fortsoft/pippo/demo/controller/ControllerDemo.java index 4eeaf96fc..0ecd1451b 100644 --- a/pippo-demo/src/main/java/ro/fortsoft/pippo/demo/controller/ControllerDemo.java +++ b/pippo-demo/src/main/java/ro/fortsoft/pippo/demo/controller/ControllerDemo.java @@ -29,7 +29,7 @@ public static void main(String[] args) { pippo.getApplication().GET(new WebjarsResourceHandler()); pippo.getApplication().GET(new PublicResourceHandler()); pippo.getApplication().GET("/", ContactsController.class, "index"); - pippo.getApplication().GET("/contact/{id}", ContactsController.class, "urlFor"); + pippo.getApplication().GET("/contact/{id}", ContactsController.class, "uriFor"); pippo.start(); } diff --git a/pippo-demo/src/main/java/ro/fortsoft/pippo/demo/crud/CrudApplication.java b/pippo-demo/src/main/java/ro/fortsoft/pippo/demo/crud/CrudApplication.java index 71ce62316..3452b7e56 100644 --- a/pippo-demo/src/main/java/ro/fortsoft/pippo/demo/crud/CrudApplication.java +++ b/pippo-demo/src/main/java/ro/fortsoft/pippo/demo/crud/CrudApplication.java @@ -25,11 +25,16 @@ import java.util.HashMap; import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Decebal Suiu */ public class CrudApplication extends Application { + private final Logger log = LoggerFactory.getLogger(CrudApplication.class); + private ContactService contactService; @Override @@ -43,7 +48,7 @@ public void init() { @Override public void handle(Request request, Response response, RouteHandlerChain chain) { - System.out.println("request.getUri() = " + request.getUri()); + log.info("request.getUri() = {}", request.getUri()); chain.next(); } @@ -114,8 +119,8 @@ public void handle(Request request, Response response, RouteHandlerChain chain) editAction.append("&id="); editAction.append(id); } - model.put("editAction", editAction); - model.put("backAction", "/contacts"); + model.put("editAction", getRouter().uriFor(editAction.toString())); + model.put("backAction", getRouter().uriFor("/contacts")); response.render("crud/contact", model); } diff --git a/pippo-freemarker/src/main/java/ro/fortsoft/pippo/freemarker/ClasspathResourceMethod.java b/pippo-freemarker/src/main/java/ro/fortsoft/pippo/freemarker/ClasspathResourceMethod.java index bd2a0ff74..f36f782af 100644 --- a/pippo-freemarker/src/main/java/ro/fortsoft/pippo/freemarker/ClasspathResourceMethod.java +++ b/pippo-freemarker/src/main/java/ro/fortsoft/pippo/freemarker/ClasspathResourceMethod.java @@ -56,7 +56,7 @@ public ClasspathResourceMethod(Router router, Class resourceHandlerClass) { @Override public TemplateModel exec(List args) throws TemplateModelException { if (urlPattern.get() == null) { - String pattern = router.urlPatternFor(resourceHandlerClass); + String pattern = router.uriPatternFor(resourceHandlerClass); if (pattern == null) { throw new PippoRuntimeException("You must register a route for {}", resourceHandlerClass.getSimpleName()); @@ -68,7 +68,7 @@ public TemplateModel exec(List args) throws TemplateModelException { String path = args.get(0).toString(); Map parameters = new HashMap<>(); parameters.put(ClasspathResourceHandler.PATH_PARAMETER, path); - String url = router.urlFor(urlPattern.get(), parameters); + String url = router.uriFor(urlPattern.get(), parameters); return new SimpleScalar(url); } diff --git a/pippo-groovy/src/main/java/ro/fortsoft/pippo/groovy/PippoGroovyTemplate.java b/pippo-groovy/src/main/java/ro/fortsoft/pippo/groovy/PippoGroovyTemplate.java index 5d4962f56..075711193 100644 --- a/pippo-groovy/src/main/java/ro/fortsoft/pippo/groovy/PippoGroovyTemplate.java +++ b/pippo-groovy/src/main/java/ro/fortsoft/pippo/groovy/PippoGroovyTemplate.java @@ -123,7 +123,7 @@ private String classpathResourceAt(String path, AtomicReference patternR Class resourceHandlerClass) { if (patternRef.get() == null) { - String pattern = router.urlPatternFor(resourceHandlerClass); + String pattern = router.uriPatternFor(resourceHandlerClass); if (pattern == null) { throw new PippoRuntimeException("You must register a route for {}", resourceHandlerClass.getSimpleName()); @@ -134,8 +134,8 @@ private String classpathResourceAt(String path, AtomicReference patternR Map parameters = new HashMap<>(); parameters.put(ClasspathResourceHandler.PATH_PARAMETER, path); - String url = router.urlFor(patternRef.get(), parameters); - return url; + String uri = router.uriFor(patternRef.get(), parameters); + return uri; } public String i18n(String messageKey) throws IOException { diff --git a/pippo-jade/src/main/java/ro/fortsoft/pippo/jade/PippoHelper.java b/pippo-jade/src/main/java/ro/fortsoft/pippo/jade/PippoHelper.java index 6b9e54be8..78759a7cc 100644 --- a/pippo-jade/src/main/java/ro/fortsoft/pippo/jade/PippoHelper.java +++ b/pippo-jade/src/main/java/ro/fortsoft/pippo/jade/PippoHelper.java @@ -75,7 +75,7 @@ private String classpathResourceAt(String path, AtomicReference patternR Class resourceHandlerClass) { if (patternRef.get() == null) { - String pattern = router.urlPatternFor(resourceHandlerClass); + String pattern = router.uriPatternFor(resourceHandlerClass); if (pattern == null) { throw new PippoRuntimeException("You must register a route for {}", resourceHandlerClass.getSimpleName()); @@ -86,7 +86,7 @@ private String classpathResourceAt(String path, AtomicReference patternR Map parameters = new HashMap<>(); parameters.put(ClasspathResourceHandler.PATH_PARAMETER, path); - String url = router.urlFor(patternRef.get(), parameters); + String url = router.uriFor(patternRef.get(), parameters); return url; } diff --git a/pippo-pebble/src/main/java/ro/fortsoft/pippo/pebble/ClasspathResourceFunction.java b/pippo-pebble/src/main/java/ro/fortsoft/pippo/pebble/ClasspathResourceFunction.java index ddbb8eef2..e42d4084b 100644 --- a/pippo-pebble/src/main/java/ro/fortsoft/pippo/pebble/ClasspathResourceFunction.java +++ b/pippo-pebble/src/main/java/ro/fortsoft/pippo/pebble/ClasspathResourceFunction.java @@ -55,7 +55,7 @@ public List getArgumentNames() { @Override public Object execute(Map args) { if (patternRef.get() == null) { - String pattern = router.urlPatternFor(resourceHandlerClass); + String pattern = router.uriPatternFor(resourceHandlerClass); if (pattern == null) { throw new PippoRuntimeException("You must register a route for {}", resourceHandlerClass.getSimpleName()); @@ -66,7 +66,7 @@ public Object execute(Map args) { String path = (String) args.get(ClasspathResourceHandler.PATH_PARAMETER); Map parameters = new HashMap<>(); parameters.put(ClasspathResourceHandler.PATH_PARAMETER, path); - String url = router.urlFor(patternRef.get(), parameters); + String url = router.uriFor(patternRef.get(), parameters); return url; } diff --git a/pippo-trimou/src/main/java/ro/fortsoft/pippo/trimou/ClasspathResourceHelper.java b/pippo-trimou/src/main/java/ro/fortsoft/pippo/trimou/ClasspathResourceHelper.java index e2ca2b08f..0bb6cc942 100644 --- a/pippo-trimou/src/main/java/ro/fortsoft/pippo/trimou/ClasspathResourceHelper.java +++ b/pippo-trimou/src/main/java/ro/fortsoft/pippo/trimou/ClasspathResourceHelper.java @@ -47,7 +47,7 @@ protected ClasspathResourceHelper(Router router, Class resourceHandlerClass) @Override public void execute(Options options) { if (patternRef.get() == null) { - String pattern = router.urlPatternFor(resourceHandlerClass); + String pattern = router.uriPatternFor(resourceHandlerClass); if (pattern == null) { throw new PippoRuntimeException("You must register a route for {}", resourceHandlerClass.getSimpleName()); @@ -58,7 +58,7 @@ public void execute(Options options) { String path = (String) options.getParameters().get(0); Map parameters = new HashMap<>(); parameters.put(ClasspathResourceHandler.PATH_PARAMETER, path); - String url = router.urlFor(patternRef.get(), parameters); + String url = router.uriFor(patternRef.get(), parameters); append(options, url); }