Author: jholmes Date: Mon Aug 13 19:02:49 2007 New Revision: 565609 URL: http://svn.apache.org/viewvc?view=rev&rev=565609 Log: WW-1950 UrlHelper.buildUrl does not output port even if forceAddSchemeHostAndPort turned on (TestCase included)
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/util/UrlHelperTest.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java?view=diff&rev=565609&r1=565608&r2=565609 ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java Mon Aug 13 19:02:49 2007 @@ -108,15 +108,24 @@ link.append(request.getServerName()); if (scheme != null) { - if ((scheme.equals("http") && (httpPort != DEFAULT_HTTP_PORT)) || (scheme.equals("https") && httpsPort != DEFAULT_HTTPS_PORT)) - { - link.append(":"); - link.append(scheme.equals("http") ? httpPort : httpsPort); + // If switching schemes, use the configured port for the particular scheme. + if (!scheme.equals(reqScheme)) { + if ((scheme.equals("http") && (httpPort != DEFAULT_HTTP_PORT)) || (scheme.equals("https") && httpsPort != DEFAULT_HTTPS_PORT)) { + link.append(":"); + link.append(scheme.equals("http") ? httpPort : httpsPort); + } + // Else use the port from the current request. + } else { + int reqPort = request.getServerPort(); + + if ((scheme.equals("http") && (reqPort != DEFAULT_HTTP_PORT)) || (scheme.equals("https") && reqPort != DEFAULT_HTTPS_PORT)) { + link.append(":"); + link.append(reqPort); + } } } } - else if ( - (scheme != null) && !scheme.equals(request.getScheme())) { + else if ((scheme != null) && !scheme.equals(request.getScheme())) { changedScheme = true; link.append(scheme); link.append("://"); Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/util/UrlHelperTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/util/UrlHelperTest.java?view=diff&rev=565609&r1=565608&r2=565609 ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/util/UrlHelperTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/util/UrlHelperTest.java Mon Aug 13 19:02:49 2007 @@ -46,6 +46,7 @@ mockHttpServletRequest.expectAndReturn("getScheme", "http"); mockHttpServletRequest.expectAndReturn("getServerName", "localhost"); mockHttpServletRequest.expectAndReturn("getContextPath", "/contextPath"); + mockHttpServletRequest.expectAndReturn("getServerPort", 80); Mock mockHttpServletResponse = new Mock(HttpServletResponse.class); mockHttpServletResponse.expectAndReturn("encodeURL", expectedUrl, expectedUrl); @@ -71,6 +72,22 @@ assertEquals(expectedUrl, result); } + public void testForceAddSchemeHostAndPortWithNonStandardPort() throws Exception { + String expectedUrl = "http://localhost:9090/contextPath/path1/path2/myAction.action"; + + Mock mockHttpServletRequest = new Mock(HttpServletRequest.class); + mockHttpServletRequest.expectAndReturn("getScheme", "http"); + mockHttpServletRequest.expectAndReturn("getServerName", "localhost"); + mockHttpServletRequest.expectAndReturn("getContextPath", "/contextPath"); + mockHttpServletRequest.expectAndReturn("getServerPort", 9090); + + Mock mockHttpServletResponse = new Mock(HttpServletResponse.class); + mockHttpServletResponse.expectAndReturn("encodeURL", expectedUrl, expectedUrl); + + String result = UrlHelper.buildUrl("/path1/path2/myAction.action", (HttpServletRequest) mockHttpServletRequest.proxy(), (HttpServletResponse)mockHttpServletResponse.proxy(), null, "http", true, true, true); + assertEquals(expectedUrl, result); + mockHttpServletRequest.verify(); + } public void testBuildParametersStringWithUrlHavingSomeExistingParameters() throws Exception { String expectedUrl = "http://localhost:8080/myContext/myPage.jsp?initParam=initValue&param1=value1&param2=value2";