You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2011/08/05 11:35:22 UTC

svn commit: r1154143 - in /cxf/trunk/rt/transports/http/src: main/java/org/apache/cxf/transport/servlet/BaseUrlHelper.java test/java/org/apache/cxf/transport/servlet/servicelist/BaseUrlHelperTest.java

Author: sergeyb
Date: Fri Aug  5 09:35:22 2011
New Revision: 1154143

URL: http://svn.apache.org/viewvc?rev=1154143&view=rev
Log:
[CXF-3709] Removing index-based calculation of base URL

Modified:
    cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/BaseUrlHelper.java
    cxf/trunk/rt/transports/http/src/test/java/org/apache/cxf/transport/servlet/servicelist/BaseUrlHelperTest.java

Modified: cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/BaseUrlHelper.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/BaseUrlHelper.java?rev=1154143&r1=1154142&r2=1154143&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/BaseUrlHelper.java (original)
+++ cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/BaseUrlHelper.java Fri Aug  5 09:35:22 2011
@@ -18,6 +18,8 @@
  */
 package org.apache.cxf.transport.servlet;
 
+import java.net.URI;
+
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.cxf.transport.AbstractDestination;
@@ -28,36 +30,31 @@ public final class BaseUrlHelper {
     private BaseUrlHelper() {
     }
 
+    /**
+     * Returns base URL which includes scheme, host, port, Servlet context and servlet paths
+     * @param request current HttpServletRequest
+     * @return base URL
+     */
     public static String getBaseURL(HttpServletRequest request) {
         String reqPrefix = request.getRequestURL().toString();        
         String pathInfo = request.getPathInfo() == null ? "" : request.getPathInfo();
         //fix for CXF-898
         if (!"/".equals(pathInfo) || reqPrefix.endsWith("/")) {
-            String basePath = request.getContextPath() + request.getServletPath();
-            int index;
-            if (basePath.length() == 0) {
-                index = reqPrefix.indexOf(request.getRequestURI());
-            } else {
-                index = reqPrefix.indexOf(basePath);
-            }
-            reqPrefix = reqPrefix.substring(0, index + basePath.length());
+            StringBuilder sb = new StringBuilder();
+            // request.getScheme(), request.getLocalName() and request.getLocalPort()
+            // should be marginally cheaper - provided request.getLocalName() does 
+            // return the actual name used in request URI as opposed to localhost
+            // consistently across the Servlet stacks
+            
+            URI uri = URI.create(reqPrefix);
+            sb.append(uri.getScheme()).append("://").append(uri.getRawAuthority());
+            sb.append(request.getContextPath()).append(request.getServletPath());
+            
+            reqPrefix = sb.toString();
         }
         return reqPrefix;
     }
     
-    public static void makeAddressesAbsolute(HttpServletRequest request, String baseAddress, 
-                                              AbstractDestination[] destinations) {
-        for (AbstractDestination dest : destinations) {
-            String addr = dest.getEndpointInfo().getAddress();
-            if (addr == null || addr.length() == 0) {
-                addr = "/";
-            }
-            if (addr != null && !addr.startsWith("http")) {
-                String base = baseAddress == null ? BaseUrlHelper.getBaseURL(request) : baseAddress;
-                setAddress(dest, base + addr);
-            }
-        }
-    }
 
     public static void setAddress(AbstractDestination dest, String absAddress) {
         dest.getEndpointInfo().setAddress(absAddress);

Modified: cxf/trunk/rt/transports/http/src/test/java/org/apache/cxf/transport/servlet/servicelist/BaseUrlHelperTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/test/java/org/apache/cxf/transport/servlet/servicelist/BaseUrlHelperTest.java?rev=1154143&r1=1154142&r2=1154143&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http/src/test/java/org/apache/cxf/transport/servlet/servicelist/BaseUrlHelperTest.java (original)
+++ cxf/trunk/rt/transports/http/src/test/java/org/apache/cxf/transport/servlet/servicelist/BaseUrlHelperTest.java Fri Aug  5 09:35:22 2011
@@ -52,6 +52,12 @@ public class BaseUrlHelperTest {
     }
 
     @Test
+    public void testGetRequestURLWithRepeatingValues() throws Exception {
+        String url = testGetBaseURL("http://services.com/services/bar", "/services", "", "/bar");
+        Assert.assertEquals("http://services.com/services", url);
+    }
+    
+    @Test
     public void testGetRequestURL() throws Exception {
         String url = testGetBaseURL("http://localhost:8080/services/bar", "", "/services", "/bar");
         Assert.assertEquals("http://localhost:8080/services", url);