Return-Path: X-Original-To: apmail-cxf-commits-archive@www.apache.org Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 90F62987B for ; Mon, 28 Nov 2011 15:55:47 +0000 (UTC) Received: (qmail 19309 invoked by uid 500); 28 Nov 2011 15:55:47 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 19227 invoked by uid 500); 28 Nov 2011 15:55:46 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 19130 invoked by uid 99); 28 Nov 2011 15:55:46 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 28 Nov 2011 15:55:46 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,NORMAL_HTTP_TO_IP X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 28 Nov 2011 15:55:45 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 0321523889ED for ; Mon, 28 Nov 2011 15:55:25 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1207334 - in /cxf/trunk/rt/frontend/jaxrs/src: main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java Date: Mon, 28 Nov 2011 15:55:24 -0000 To: commits@cxf.apache.org From: sergeyb@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20111128155525.0321523889ED@eris.apache.org> Author: sergeyb Date: Mon Nov 28 15:55:23 2011 New Revision: 1207334 URL: http://svn.apache.org/viewvc?rev=1207334&view=rev Log: [CXF-3937] Minor fixes for UriInfo to return correct base URI Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java?rev=1207334&r1=1207333&r2=1207334&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java Mon Nov 28 15:55:23 2011 @@ -56,8 +56,9 @@ public final class HttpUtils { private static final ResourceBundle BUNDLE = BundleUtils.getBundle(HttpUtils.class); private static final Logger LOG = LogUtils.getL7dLogger(HttpUtils.class); - private static final String LOCAL_IP_ADDRESS = "127.0.0.1"; - private static final String LOCAL_HOST = "localhost"; + private static final String ANY_IP_ADDRESS = "0.0.0.0"; + private static final int DEFAULT_HTTP_PORT = 80; + private static final Pattern ENCODE_PATTERN = Pattern.compile("%[0-9a-fA-F][0-9a-fA-F]"); private static final String CHARSET_PARAMETER = "charset"; @@ -181,18 +182,21 @@ public final class HttpUtils { || HttpHeaders.LAST_MODIFIED.equalsIgnoreCase(headerName); } - public static URI toAbsoluteUri(URI u, Message message) { - if (!u.isAbsolute()) { - HttpServletRequest httpRequest = - (HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST); - if (httpRequest != null) { - String scheme = httpRequest.isSecure() ? "https" : "http"; - String host = httpRequest.getLocalName(); - if (LOCAL_IP_ADDRESS.equals(host)) { - host = LOCAL_HOST; - } - int port = httpRequest.getLocalPort(); - return URI.create(scheme + "://" + host + ':' + port + u.toString()); + public static URI toAbsoluteUri(URI u, Message message) { + HttpServletRequest request = + (HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST); + boolean absolute = u.isAbsolute(); + if (request != null && (!absolute || u.getHost().equals(ANY_IP_ADDRESS))) { + String serverAndPort = request.getServerName(); + int port = request.getLocalPort(); + if (port != DEFAULT_HTTP_PORT) { + serverAndPort += ":" + port; + } + String base = request.getScheme() + "://" + serverAndPort; + if (!absolute) { + u = URI.create(base + u.toString()); + } else { + u = URI.create(u.toString().replace(ANY_IP_ADDRESS, serverAndPort)); } } return u; @@ -239,7 +243,9 @@ public final class HttpUtils { } else { address = (String)m.get(Message.ENDPOINT_ADDRESS); } - + if (address.startsWith("http") && address.endsWith("//")) { + address = address.substring(0, address.length() - 1); + } return address; } Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java?rev=1207334&r1=1207333&r2=1207334&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java Mon Nov 28 15:55:23 2011 @@ -19,6 +19,9 @@ package org.apache.cxf.jaxrs.utils; +import java.net.URI; + +import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; @@ -28,6 +31,7 @@ import org.apache.cxf.message.ExchangeIm import org.apache.cxf.message.Message; import org.apache.cxf.message.MessageImpl; import org.apache.cxf.transport.Destination; +import org.apache.cxf.transport.http.AbstractHTTPDestination; import org.easymock.EasyMock; import org.junit.Assert; @@ -142,6 +146,22 @@ public class HttpUtilsTest extends Asser doTestGetBaseAddress("/s", "/s"); } + @Test + public void testReplaceAnyIPAddress() { + Message m = new MessageImpl(); + HttpServletRequest req = EasyMock.createMock(HttpServletRequest.class); + m.put(AbstractHTTPDestination.HTTP_REQUEST, req); + req.getScheme(); + EasyMock.expectLastCall().andReturn("http"); + req.getServerName(); + EasyMock.expectLastCall().andReturn("localhost"); + req.getLocalPort(); + EasyMock.expectLastCall().andReturn(8080); + EasyMock.replay(req); + URI u = HttpUtils.toAbsoluteUri(URI.create("http://0.0.0.0/bar/foo"), m); + assertEquals("http://localhost:8080/bar/foo", u.toString()); + } + private void doTestGetBaseAddress(String baseURI, String expected) { Message m = new MessageImpl(); Exchange exchange = new ExchangeImpl();