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";;


Reply via email to