Author: mgrigorov
Date: Wed Mar 2 15:40:58 2011
New Revision: 1076261
URL: http://svn.apache.org/viewvc?rev=1076261&view=rev
Log:
WICKET-3490 HybridUrlEncoding Strategy throws uncaught NumberFormatException if
Integer value space is violated
Return 'null' PageInfo if pageId or versionId is not parseable to Integer.
Added:
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategyTest.java
Modified:
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
Modified:
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
URL:
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java?rev=1076261&r1=1076260&r2=1076261&view=diff
==============================================================================
---
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
(original)
+++
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
Wed Mar 2 15:40:58 2011
@@ -37,6 +37,8 @@ import org.apache.wicket.request.target.
import
org.apache.wicket.request.target.component.listener.ListenerInterfaceRequestTarget;
import org.apache.wicket.util.string.AppendingStringBuffer;
import org.apache.wicket.util.string.Strings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
@@ -676,6 +678,8 @@ public class HybridUrlCodingStrategy ext
*/
protected static class PageInfo
{
+ private static final Logger logger =
LoggerFactory.getLogger(PageInfo.class);
+
private final Integer pageId;
private final Integer versionNumber;
private final String pageMapName;
@@ -854,7 +858,7 @@ public class HybridUrlCodingStrategy ext
return null;
}
- // go trhough the segments to determine if they don't
contains invalid characters
+ // go through the segments to determine if they don't
contains invalid characters
for (int i = 0; i < segments.length; ++i)
{
for (int j = 0; j < segments[i].length(); ++j)
@@ -867,48 +871,56 @@ public class HybridUrlCodingStrategy ext
}
}
- if ((segments.length == 1) && isNumber(segments[0]))
- {
- // pageId
- return new
PageInfo(Integer.valueOf(segments[0]), new Integer(0), null);
- }
- else if ((segments.length == 2) &&
isNumber(segments[0]) && isNumber(segments[1]))
- {
- // pageId:pageVersion
- return new
PageInfo(Integer.valueOf(segments[0]), Integer.valueOf(segments[1]),
- null);
- }
- else if ((segments.length == 1) &&
!isNumber(segments[0]))
- {
- // pageMap (starts with letter)
- return new PageInfo(null, null, segments[0]);
- }
- else if ((segments.length == 2) &&
(segments[0].length() == 0))
- {
- // .pageMap
- return new PageInfo(null, null, segments[1]);
- }
- else if ((segments.length == 2) &&
!isNumber(segments[0]) && isNumber(segments[1]))
+ try
{
- // pageMap.pageId (pageMap starts with letter)
- return new
PageInfo(Integer.valueOf(segments[1]), new Integer(0), segments[0]);
- }
- else if (segments.length == 3)
- {
- if ((segments[2].length() == 0) &&
isNumber(segments[1]))
+ if ((segments.length == 1) &&
isNumber(segments[0]))
{
- // we don't encode it like this, but we
still should be able
- // to parse it
- // pageMapName.pageId.
+ // pageId
+ return new
PageInfo(Integer.valueOf(segments[0]), new Integer(0), null);
+ }
+ else if ((segments.length == 2) &&
isNumber(segments[0]) && isNumber(segments[1]))
+ {
+ // pageId:pageVersion
+ return new
PageInfo(Integer.valueOf(segments[0]), Integer.valueOf(segments[1]),
+ null);
+ }
+ else if ((segments.length == 1) &&
!isNumber(segments[0]))
+ {
+ // pageMap (starts with letter)
+ return new PageInfo(null, null,
segments[0]);
+ }
+ else if ((segments.length == 2) &&
(segments[0].length() == 0))
+ {
+ // .pageMap
+ return new PageInfo(null, null,
segments[1]);
+ }
+ else if ((segments.length == 2) &&
!isNumber(segments[0]) && isNumber(segments[1]))
+ {
+ // pageMap.pageId (pageMap starts with
letter)
return new
PageInfo(Integer.valueOf(segments[1]), new Integer(0), segments[0]);
}
- else if (isNumber(segments[1]) &&
isNumber(segments[2]))
+ else if (segments.length == 3)
{
- // pageMapName.pageId.pageVersion
- return new
PageInfo(Integer.valueOf(segments[1]), Integer.valueOf(segments[2]),
- segments[0]);
+ if ((segments[2].length() == 0) &&
isNumber(segments[1]))
+ {
+ // we don't encode it like
this, but we still should be able
+ // to parse it
+ // pageMapName.pageId.
+ return new
PageInfo(Integer.valueOf(segments[1]), new Integer(0),
+ segments[0]);
+ }
+ else if (isNumber(segments[1]) &&
isNumber(segments[2]))
+ {
+ //
pageMapName.pageId.pageVersion
+ return new
PageInfo(Integer.valueOf(segments[1]),
+
Integer.valueOf(segments[2]), segments[0]);
+ }
}
}
+ catch (NumberFormatException nfx)
+ {
+ logger.debug("Cannot parse PageInfo from '{}':
{}", src, nfx.getMessage());
+ }
return null;
}
Added:
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategyTest.java
URL:
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategyTest.java?rev=1076261&view=auto
==============================================================================
---
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategyTest.java
(added)
+++
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategyTest.java
Wed Mar 2 15:40:58 2011
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.target.coding;
+
+import junit.framework.TestCase;
+
+import
org.apache.wicket.request.target.coding.HybridUrlCodingStrategy.PageInfo;
+
+public class HybridUrlCodingStrategyTest extends TestCase
+{
+
+ /**
+ * <a
href="https://issues.apache.org/jira/browse/WICKET-3490">WICKET-3490</a>
+ */
+ public void testParsePageInfo()
+ {
+ PageInfo pageInfo =
PageInfo.parsePageInfo("99999999999999999999999999999999999999999999999999999999999999999999999");
+ assertNull(pageInfo);
+ }
+}