From 4ba93b43495d6af09e37b4276317c6baccdfd649 Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Wed, 10 Dec 2008 14:01:51 +0000 Subject: [PATCH] handler mapping fixes --- .../context/servlet/DefaultFlowUrlHandler.java | 14 ++++++++++++-- .../webflow/mvc/servlet/FlowHandlerMapping.java | 3 +++ .../servlet/DefaultFlowUrlHandlerTests.java | 2 +- .../mvc/servlet/FlowHandlerMappingTests.java | 6 ++++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/spring-webflow/src/main/java/org/springframework/webflow/context/servlet/DefaultFlowUrlHandler.java b/spring-webflow/src/main/java/org/springframework/webflow/context/servlet/DefaultFlowUrlHandler.java index 13c340dd..ffb4b566 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/context/servlet/DefaultFlowUrlHandler.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/context/servlet/DefaultFlowUrlHandler.java @@ -76,7 +76,12 @@ public class DefaultFlowUrlHandler implements FlowUrlHandler { return servletPath.substring(1); } } else { - return request.getContextPath().substring(1); + String contextPath = request.getContextPath(); + if (StringUtils.hasText(contextPath)) { + return request.getContextPath().substring(1); + } else { + return null; + } } } } @@ -97,10 +102,15 @@ public class DefaultFlowUrlHandler implements FlowUrlHandler { url.append('/'); url.append(flowId); } else { - if (StringUtils.hasText(request.getServletPath())) { + String servletPath = request.getServletPath(); + if (StringUtils.hasText(servletPath)) { url.append(request.getContextPath()); url.append('/'); url.append(flowId); + int dotIndex = servletPath.lastIndexOf('.'); + if (dotIndex != -1) { + url.append(servletPath.substring(dotIndex)); + } } else { url.append('/'); url.append(flowId); diff --git a/spring-webflow/src/main/java/org/springframework/webflow/mvc/servlet/FlowHandlerMapping.java b/spring-webflow/src/main/java/org/springframework/webflow/mvc/servlet/FlowHandlerMapping.java index 0eec56c4..ce8ce57c 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/mvc/servlet/FlowHandlerMapping.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/mvc/servlet/FlowHandlerMapping.java @@ -90,6 +90,9 @@ public class FlowHandlerMapping extends AbstractHandlerMapping { protected Object getHandlerInternal(HttpServletRequest request) throws Exception { String flowId = flowUrlHandler.getFlowId(request); + if (flowId == null) { + return null; + } if (getApplicationContext().containsBean(flowId)) { Object handler = getApplicationContext().getBean(flowId); if (handler instanceof FlowHandler) { diff --git a/spring-webflow/src/test/java/org/springframework/webflow/context/servlet/DefaultFlowUrlHandlerTests.java b/spring-webflow/src/test/java/org/springframework/webflow/context/servlet/DefaultFlowUrlHandlerTests.java index 2763aad2..2614efb4 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/context/servlet/DefaultFlowUrlHandlerTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/context/servlet/DefaultFlowUrlHandlerTests.java @@ -58,7 +58,7 @@ public class DefaultFlowUrlHandlerTests extends TestCase { request.setServletPath("/app/foo.htm"); request.setRequestURI("/springtravel/app/foo"); String url = urlHandler.createFlowDefinitionUrl("app/foo", null, request); - assertEquals("/springtravel/app/foo", url); + assertEquals("/springtravel/app/foo.htm", url); } public void testCreateFlowDefinitionUrlContextPathOnly() { diff --git a/spring-webflow/src/test/java/org/springframework/webflow/mvc/servlet/FlowHandlerMappingTests.java b/spring-webflow/src/test/java/org/springframework/webflow/mvc/servlet/FlowHandlerMappingTests.java index 2f3e91d8..63585a56 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/mvc/servlet/FlowHandlerMappingTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/mvc/servlet/FlowHandlerMappingTests.java @@ -68,6 +68,12 @@ public class FlowHandlerMappingTests extends TestCase { assertNull(chain); } + public void testGetHandlerNullFlowId() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + HandlerExecutionChain chain = mapping.getHandler(request); + assertNull(chain); + } + private static class FlowDefinitionImpl implements FlowDefinition { private String flowId = "flow";