You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2013/04/12 09:43:52 UTC

git commit: WICKET-5141 Exception while rendering absolute URL with UrlResourceReference

Updated Branches:
  refs/heads/master ef3adb122 -> 4315a1c19


WICKET-5141 Exception while rendering absolute URL with UrlResourceReference


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/4315a1c1
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/4315a1c1
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/4315a1c1

Branch: refs/heads/master
Commit: 4315a1c192bf31330ea040723d3e6314c02ef55a
Parents: ef3adb1
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Fri Apr 12 10:42:32 2013 +0300
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Apr 12 10:43:38 2013 +0300

----------------------------------------------------------------------
 .../request/resource/UrlResourceReference.java     |   19 +++++++-
 .../request/resource/UrlResourceReferenceTest.java |   13 +++++
 .../main/java/org/apache/wicket/request/Url.java   |   24 +++++++++
 .../org/apache/wicket/request/UrlRenderer.java     |    2 +-
 .../java/org/apache/wicket/request/UrlTest.java    |   38 +++++++++++++++
 5 files changed, 93 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/4315a1c1/wicket-core/src/main/java/org/apache/wicket/request/resource/UrlResourceReference.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/UrlResourceReference.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/UrlResourceReference.java
index 98e76c9..8cf7586 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/UrlResourceReference.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/UrlResourceReference.java
@@ -45,7 +45,8 @@ public class UrlResourceReference extends ResourceReference
 		@Override
 		public String renderFullUrl(Url url, Url baseUrl)
 		{
-			return url.toString(StringMode.FULL);
+			StringMode mode = getStringMode(url);
+			return url.toString(mode);
 		}
 
 		@Override
@@ -132,8 +133,22 @@ public class UrlResourceReference extends ResourceReference
 	public String toString()
 	{
 		return "UrlResourceReference{" +
-				"url=" + url.toString(Url.StringMode.FULL) +
+				"url=" + url.toString(getStringMode(url)) +
 				", contextRelative=" + contextRelative +
 				'}';
 	}
+
+	private static Url.StringMode getStringMode(Url url)
+	{
+		final Url.StringMode mode;
+		if (url.isFull())
+		{
+			mode = Url.StringMode.FULL;
+		}
+		else
+		{
+			mode = Url.StringMode.LOCAL;
+		}
+		return mode;
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/4315a1c1/wicket-core/src/test/java/org/apache/wicket/request/resource/UrlResourceReferenceTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/UrlResourceReferenceTest.java b/wicket-core/src/test/java/org/apache/wicket/request/resource/UrlResourceReferenceTest.java
index 62fb31a..3405b22 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/UrlResourceReferenceTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/resource/UrlResourceReferenceTest.java
@@ -57,6 +57,19 @@ public class UrlResourceReferenceTest extends WicketTestCase
 		assertNull(reference.getResource());
 	}
 
+	@Test
+	public void contextAbsoluteUrl()
+	{
+		Url url = Url.parse("/some/path.ext");
+		UrlResourceReference reference = new UrlResourceReference(url);
+		assertEquals(url, reference.getUrl());
+		assertNull(reference.getResource());
+
+		CharSequence _url = tester.getRequestCycle().urlFor(reference, null);
+		assertEquals(url.toString(), _url);
+		assertNull(reference.getResource());
+	}
+
 	@Test(expected = IllegalStateException.class)
 	public void cannotMakeAnAbsoluteUrlContextRelative()
 	{

http://git-wip-us.apache.org/repos/asf/wicket/blob/4315a1c1/wicket-request/src/main/java/org/apache/wicket/request/Url.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/Url.java b/wicket-request/src/main/java/org/apache/wicket/request/Url.java
index 9ca2c0d..6aa6e25 100755
--- a/wicket-request/src/main/java/org/apache/wicket/request/Url.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/Url.java
@@ -434,13 +434,37 @@ public class Url implements Serializable
 	 * Returns whether the Url is absolute. Absolute Urls start with a '{@literal /}'.
 	 * 
 	 * @return <code>true</code> if Url is absolute, <code>false</code> otherwise.
+	 * @deprecated Use #isContextAbsolute() or #isFull()
 	 */
+	@Deprecated
 	public boolean isAbsolute()
 	{
 		return !getSegments().isEmpty() && Strings.isEmpty(getSegments().get(0));
 	}
 
 	/**
+	 * Returns whether the Url is context absolute. Absolute Urls start with a '{@literal /}'.
+	 *
+	 * @return <code>true</code> if Url starts with the context path, <code>false</code> otherwise.
+	 */
+	public boolean isContextAbsolute()
+	{
+		return !isFull() && !getSegments().isEmpty() && Strings.isEmpty(getSegments().get(0));
+	}
+
+	/**
+	 * Returns whether the Url has a <em>host</em> attribute.
+	 * The scheme is optional because the url may be <code>//host/path</code>.
+	 * The port is also optional because there are defaults for the different protocols.
+	 *
+	 * @return <code>true</code> if Url has a <em>host</em> attribute, <code>false</code> otherwise.
+	 */
+	public boolean isFull()
+	{
+		return getHost() != null;
+	}
+
+	/**
 	 * Convenience method that removes all query parameters with given name.
 	 * 
 	 * @param name

http://git-wip-us.apache.org/repos/asf/wicket/blob/4315a1c1/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java b/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
index db60c13..78cd074 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
@@ -363,7 +363,7 @@ public class UrlRenderer
 		{
 			return true;
 		}
-		if (url.isAbsolute())
+		if (url.isContextAbsolute())
 		{
 			// do not relativize urls like "/a/b"
 			return true;

http://git-wip-us.apache.org/repos/asf/wicket/blob/4315a1c1/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java b/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java
index eaebe14..9daedf5 100644
--- a/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java
+++ b/wicket-request/src/test/java/org/apache/wicket/request/UrlTest.java
@@ -927,4 +927,42 @@ public class UrlTest extends Assert
         url.setHost("wicketHost");
         url.toString(StringMode.FULL);
     }
+
+	@Test
+	public void isContextAbsolute()
+	{
+		Url url = Url.parse("");
+		assertFalse(url.isContextAbsolute());
+
+		url = Url.parse("http://www.example.com/path");
+		assertFalse(url.isContextAbsolute());
+
+		url = Url.parse("//www.example.com/path");
+		assertFalse(url.isContextAbsolute());
+
+		url = Url.parse("path");
+		assertFalse(url.isContextAbsolute());
+
+		url = Url.parse("/path");
+		assertTrue(url.isContextAbsolute());
+	}
+
+	@Test
+	public void isFull()
+	{
+		Url url = Url.parse("");
+		assertFalse(url.isFull());
+
+		url = Url.parse("http://www.example.com/path");
+		assertTrue(url.isFull());
+
+		url = Url.parse("//www.example.com/path");
+		assertTrue(url.isFull());
+
+		url = Url.parse("path");
+		assertFalse(url.isFull());
+
+		url = Url.parse("/path");
+		assertFalse(url.isFull());
+	}
 }