Updated Branches:
  refs/heads/wicket-1.5.x 80dc5dcef -> 532920dfa

WICKET-4312
Do not strip the jsessionid from the url for resources


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

Branch: refs/heads/wicket-1.5.x
Commit: 532920dfad88f9040b071492d9fca9b72fe34f58
Parents: 80dc5dc
Author: martin-g <[email protected]>
Authored: Thu Dec 22 13:15:30 2011 +0200
Committer: martin-g <[email protected]>
Committed: Thu Dec 22 13:15:30 2011 +0200

----------------------------------------------------------------------
 .../java/org/apache/wicket/ajax/wicket-ajax.js     |   46 +++++++++++++-
 .../markup/html/internal/HeaderResponse.java       |    4 +-
 .../markup/html/internal/HeaderResponseTest.java   |   16 +++++
 3 files changed, 60 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/532920df/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax.js
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax.js 
b/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax.js
index 8301a17..8d412ec 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax.js
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax.js
@@ -1801,7 +1801,7 @@ Wicket.Head.addElement = function(element) {
 // is an element in head that is of same type as myElement, and whose src
 // attribute is same as myElement.src.
 Wicket.Head.containsElement = function(element, mandatoryAttribute) {
-       var attr = element.getAttribute(mandatoryAttribute);
+       var attr = 
Wicket.Head.stripJSessionId(element.getAttribute(mandatoryAttribute));
        if (attr == null || attr == "" || typeof(attr) == "undefined")
                return false;
 
@@ -1819,9 +1819,9 @@ Wicket.Head.containsElement = function(element, 
mandatoryAttribute) {
                // we also have to check for attribute name that is suffixed by 
"_".
                // this is necessary for filtering script references
                if (node.tagName.toLowerCase() == 
element.tagName.toLowerCase()) {
-               
-                       var loadedUrl = node.getAttribute(mandatoryAttribute);
-                       var loadedUrl_ = 
node.getAttribute(mandatoryAttribute+"_");
+
+                       var loadedUrl = 
Wicket.Head.stripJSessionId(node.getAttribute(mandatoryAttribute));
+                       var loadedUrl_ = 
Wicket.Head.stripJSessionId(node.getAttribute(mandatoryAttribute+"_"));
                        if (loadedUrl == attr || loadedUrl_ == attr) {
                            return true;
                        }
@@ -1830,6 +1830,44 @@ Wicket.Head.containsElement = function(element, 
mandatoryAttribute) {
        return false;
 }
 
+/**
+ * Removes the optional ';jsessionid=...' from the passed url
+ *
+ * @param {String} url the url to strip the jsessionid from
+ * @return {String} the url without the jsessionid and its value
+ */
+       // WICKET-3596
+Wicket.Head.stripJSessionId = function(url) {
+       if (url == null)
+       {
+               return null;
+       }
+
+       // http://.../abc;jsessionid=...?param=...
+       var ixSemiColon = url.indexOf(";");
+       if (ixSemiColon == -1)
+       {
+               return url;
+       }
+
+       var ixQuestionMark = url.indexOf("?");
+       if (ixQuestionMark == -1)
+       {
+               // no query paramaters; cut off at ";"
+               // http://.../abc;jsession=...
+               return url.substring(0, ixSemiColon);
+       }
+
+       if (ixQuestionMark <= ixSemiColon)
+       {
+               // ? is before ; - no jsessionid in the url
+               return url;
+       }
+
+       return url.substring(0, ixSemiColon) + url.substring(ixQuestionMark);
+}
+
+
 // Adds a javascript element to page header. 
 // The fakeSrc attribute is used to filter out duplicate javascript references.
 // External javascripts are loaded using xmlhttprequest. Then a javascript 
element is created and the

http://git-wip-us.apache.org/repos/asf/wicket/blob/532920df/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HeaderResponse.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HeaderResponse.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HeaderResponse.java
index 25e908a..1d4de09 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HeaderResponse.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HeaderResponse.java
@@ -145,7 +145,7 @@ public abstract class HeaderResponse implements 
IHeaderResponse
                                        getResponse().write("]>");
                                }
                                getResponse().write("<link rel=\"stylesheet\" 
type=\"text/css\" href=\"");
-                               getResponse().write(urlWoSessionId);
+                               getResponse().write(url);
                                getResponse().write("\"");
                                if (media != null)
                                {
@@ -246,7 +246,7 @@ public abstract class HeaderResponse implements 
IHeaderResponse
 
                        if (token1Unused && token2Unused)
                        {
-                               
JavaScriptUtils.writeJavaScriptUrl(getResponse(), urlWoSessionId, id, defer,
+                               
JavaScriptUtils.writeJavaScriptUrl(getResponse(), url, id, defer,
                                        charset);
                                markRendered(token1);
                                if (token2 != null)

http://git-wip-us.apache.org/repos/asf/wicket/blob/532920df/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java
index 6736a8f..86299e2 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java
@@ -34,6 +34,7 @@ import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.response.StringResponse;
+import org.apache.wicket.util.tester.WicketTester;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -189,4 +190,19 @@ public class HeaderResponseTest
                Assert.assertEquals(expected, actual);
        }
 
+       /**
+        * https://issues.apache.org/jira/browse/WICKET-4312
+        */
+       @Test
+       public void preserveJSessionId() {
+               WicketTester tester = new WicketTester();
+               try {
+                       
headerResponse.renderJavaScriptReference("js-resource.js;jsessionid=1h402r54r4xuep32znicouftm",
 "some-id", false, null);
+                       String expected = "<script type=\"text/javascript\" 
id=\"some-id\" 
src=\"js-resource.js;jsessionid=1h402r54r4xuep32znicouftm\"></script>\n";
+                       String actual = headerResponse.getResponse().toString();
+                       Assert.assertEquals(expected, actual);
+               } finally {
+                       tester.destroy();
+               }
+       }
 }

Reply via email to