You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ad...@apache.org on 2015/05/16 17:15:05 UTC
wicket git commit: WICKET-5904 NPE after editing a markup file in
debug mode
Repository: wicket
Updated Branches:
refs/heads/master 52d99f303 -> 32a40bc1d
WICKET-5904 NPE after editing a markup file in debug mode
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/32a40bc1
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/32a40bc1
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/32a40bc1
Branch: refs/heads/master
Commit: 32a40bc1de5302f17bbcc19cd3ab769b0dc0f274
Parents: 52d99f3
Author: Andrea Del Bene <ad...@apache.org>
Authored: Sat May 16 17:14:45 2015 +0200
Committer: Andrea Del Bene <ad...@apache.org>
Committed: Sat May 16 17:14:45 2015 +0200
----------------------------------------------------------------------
.../markup/parser/AbstractMarkupFilter.java | 31 +++++++++++++++++++-
.../markup/parser/filter/EnclosureHandler.java | 11 +------
.../filter/RelativePathPrefixHandler.java | 11 +------
3 files changed, 32 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/32a40bc1/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
index 2ce2fab..6478da2 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
@@ -17,7 +17,9 @@
package org.apache.wicket.markup.parser;
import java.text.ParseException;
+import java.util.concurrent.atomic.AtomicLong;
+import org.apache.wicket.MetaDataKey;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.HtmlSpecialTag;
import org.apache.wicket.markup.Markup;
@@ -25,6 +27,7 @@ import org.apache.wicket.markup.MarkupElement;
import org.apache.wicket.markup.MarkupParser;
import org.apache.wicket.markup.MarkupResourceStream;
import org.apache.wicket.markup.MarkupStream;
+import org.apache.wicket.request.cycle.RequestCycle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -45,7 +48,12 @@ public abstract class AbstractMarkupFilter implements IMarkupFilter
/** The next MarkupFilter in the chain */
private IMarkupFilter parent;
-
+
+ /** A key for a request-relative counter (see {@link #getRequestUniqueId()}) **/
+ private final static MetaDataKey<AtomicLong> REQUEST_COUNTER_KEY = new MetaDataKey<AtomicLong>()
+ {
+ };
+
/**
* Construct.
*/
@@ -190,4 +198,25 @@ public abstract class AbstractMarkupFilter implements IMarkupFilter
}
return wicketNamespace;
}
+
+ /**
+ * Returns an id using a request-relative counter. This can be
+ * useful for autocomponent tags that needs to get tag id.
+ *
+ * @return
+ * the request-relative id
+ */
+ protected long getRequestUniqueId()
+ {
+ AtomicLong counter = RequestCycle.get().getMetaData(REQUEST_COUNTER_KEY);
+
+ if (counter == null)
+ {
+ counter = new AtomicLong();
+
+ RequestCycle.get().setMetaData(REQUEST_COUNTER_KEY, counter);
+ }
+
+ return counter.getAndIncrement();
+ }
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/32a40bc1/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java
index 7739cd0..b29da3b 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java
@@ -19,7 +19,6 @@ package org.apache.wicket.markup.parser.filter;
import java.text.ParseException;
import java.util.ArrayDeque;
import java.util.Deque;
-import java.util.concurrent.atomic.AtomicLong;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
@@ -73,14 +72,6 @@ public final class EnclosureHandler extends AbstractMarkupFilter implements ICom
/** Stack of <wicket:enclosure> tags */
private Deque<ComponentTag> stack;
- /**
- * Used to assign unique ids to enclosures
- *
- * TODO queueing: there has to be a better way of doing this, perhaps some merged-markup-unique
- * counter
- */
- private static final AtomicLong index = new AtomicLong();
-
/** The id of the first wicket tag inside the enclosure */
private String childId;
@@ -109,7 +100,7 @@ public final class EnclosureHandler extends AbstractMarkupFilter implements ICom
// If open tag, than put the tag onto the stack
if (tag.isOpen())
{
- tag.setId(tag.getId() + index.getAndIncrement());
+ tag.setId(tag.getId() + getRequestUniqueId());
tag.setModified(true);
tag.setAutoComponentFactory(FACTORY);
http://git-wip-us.apache.org/repos/asf/wicket/blob/32a40bc1/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java
index 0523d9a..554df3e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java
@@ -18,7 +18,6 @@ package org.apache.wicket.markup.parser.filter;
import java.text.ParseException;
import java.util.Iterator;
-import java.util.concurrent.atomic.AtomicInteger;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
@@ -109,14 +108,6 @@ public final class RelativePathPrefixHandler extends AbstractMarkupFilter
}
};
-
- /**
- * https://issues.apache.org/jira/browse/WICKET-5724
- *
- * Unique index to generate new tag ids.
- * */
- private final AtomicInteger componentIndex = new AtomicInteger();
-
/**
* Constructor for the IComponentResolver role.
*/
@@ -164,7 +155,7 @@ public final class RelativePathPrefixHandler extends AbstractMarkupFilter
if (tag.getId() == null)
{
tag.setId(getWicketRelativePathPrefix(null)
- + componentIndex.getAndIncrement());
+ + getRequestUniqueId());
tag.setAutoComponentTag(true);
}
Re: wicket git commit: WICKET-5904 NPE after editing a markup file in
debug mode
Posted by Martijn Dashorst <ma...@gmail.com>.
This change causes a NPE in our unit tests (regression)--in M5 the
tests ran as expected:
java.lang.NullPointerException
at org.apache.wicket.markup.parser.AbstractMarkupFilter.getRequestUniqueId(AbstractMarkupFilter.java:211)
at org.apache.wicket.markup.parser.filter.EnclosureHandler.onComponentTag(EnclosureHandler.java:103)
at org.apache.wicket.markup.parser.AbstractMarkupFilter.nextElement(AbstractMarkupFilter.java:104)
at org.apache.wicket.markup.parser.AbstractMarkupFilter.nextElement(AbstractMarkupFilter.java:99)
at org.apache.wicket.markup.parser.AbstractMarkupFilter.nextElement(AbstractMarkupFilter.java:99)
at org.apache.wicket.markup.parser.AbstractMarkupFilter.nextElement(AbstractMarkupFilter.java:99)
at org.apache.wicket.markup.parser.AbstractMarkupFilter.nextElement(AbstractMarkupFilter.java:99)
at org.apache.wicket.markup.parser.AbstractMarkupFilter.nextElement(AbstractMarkupFilter.java:99)
at org.apache.wicket.markup.AbstractMarkupParser.getNextTag(AbstractMarkupParser.java:217)
at org.apache.wicket.markup.AbstractMarkupParser.parseMarkup(AbstractMarkupParser.java:232)
at org.apache.wicket.markup.AbstractMarkupParser.parse(AbstractMarkupParser.java:185)
at nl.topicus.cobra.test.AbstractHtmlTest$WicketParseTestRunner.run(AbstractHtmlTest.java:317)
at nl.topicus.cobra.test.AbstractHtmlTest.doTest(AbstractHtmlTest.java:146)
at nl.topicus.cobra.test.AbstractHtmlTest.doWicketParseTest(AbstractHtmlTest.java:127)
Apparently there's no requestcycle available during (our) testing so
that causes a NPE.
JIRA is down at this moment, so I am unable to create/update an issue
at this moment. Will report back later.
Martijn
On Sat, May 16, 2015 at 5:15 PM, <ad...@apache.org> wrote:
> Repository: wicket
> Updated Branches:
> refs/heads/master 52d99f303 -> 32a40bc1d
>
>
> WICKET-5904 NPE after editing a markup file in debug mode
>
>
> Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
> Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/32a40bc1
> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/32a40bc1
> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/32a40bc1
>
> Branch: refs/heads/master
> Commit: 32a40bc1de5302f17bbcc19cd3ab769b0dc0f274
> Parents: 52d99f3
> Author: Andrea Del Bene <ad...@apache.org>
> Authored: Sat May 16 17:14:45 2015 +0200
> Committer: Andrea Del Bene <ad...@apache.org>
> Committed: Sat May 16 17:14:45 2015 +0200
>
> ----------------------------------------------------------------------
> .../markup/parser/AbstractMarkupFilter.java | 31 +++++++++++++++++++-
> .../markup/parser/filter/EnclosureHandler.java | 11 +------
> .../filter/RelativePathPrefixHandler.java | 11 +------
> 3 files changed, 32 insertions(+), 21 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/32a40bc1/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
> index 2ce2fab..6478da2 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
> @@ -17,7 +17,9 @@
> package org.apache.wicket.markup.parser;
>
> import java.text.ParseException;
> +import java.util.concurrent.atomic.AtomicLong;
>
> +import org.apache.wicket.MetaDataKey;
> import org.apache.wicket.markup.ComponentTag;
> import org.apache.wicket.markup.HtmlSpecialTag;
> import org.apache.wicket.markup.Markup;
> @@ -25,6 +27,7 @@ import org.apache.wicket.markup.MarkupElement;
> import org.apache.wicket.markup.MarkupParser;
> import org.apache.wicket.markup.MarkupResourceStream;
> import org.apache.wicket.markup.MarkupStream;
> +import org.apache.wicket.request.cycle.RequestCycle;
> import org.slf4j.Logger;
> import org.slf4j.LoggerFactory;
>
> @@ -45,7 +48,12 @@ public abstract class AbstractMarkupFilter implements IMarkupFilter
>
> /** The next MarkupFilter in the chain */
> private IMarkupFilter parent;
> -
> +
> + /** A key for a request-relative counter (see {@link #getRequestUniqueId()}) **/
> + private final static MetaDataKey<AtomicLong> REQUEST_COUNTER_KEY = new MetaDataKey<AtomicLong>()
> + {
> + };
> +
> /**
> * Construct.
> */
> @@ -190,4 +198,25 @@ public abstract class AbstractMarkupFilter implements IMarkupFilter
> }
> return wicketNamespace;
> }
> +
> + /**
> + * Returns an id using a request-relative counter. This can be
> + * useful for autocomponent tags that needs to get tag id.
> + *
> + * @return
> + * the request-relative id
> + */
> + protected long getRequestUniqueId()
> + {
> + AtomicLong counter = RequestCycle.get().getMetaData(REQUEST_COUNTER_KEY);
> +
> + if (counter == null)
> + {
> + counter = new AtomicLong();
> +
> + RequestCycle.get().setMetaData(REQUEST_COUNTER_KEY, counter);
> + }
> +
> + return counter.getAndIncrement();
> + }
> }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/32a40bc1/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java
> index 7739cd0..b29da3b 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java
> @@ -19,7 +19,6 @@ package org.apache.wicket.markup.parser.filter;
> import java.text.ParseException;
> import java.util.ArrayDeque;
> import java.util.Deque;
> -import java.util.concurrent.atomic.AtomicLong;
>
> import org.apache.wicket.Component;
> import org.apache.wicket.MarkupContainer;
> @@ -73,14 +72,6 @@ public final class EnclosureHandler extends AbstractMarkupFilter implements ICom
> /** Stack of <wicket:enclosure> tags */
> private Deque<ComponentTag> stack;
>
> - /**
> - * Used to assign unique ids to enclosures
> - *
> - * TODO queueing: there has to be a better way of doing this, perhaps some merged-markup-unique
> - * counter
> - */
> - private static final AtomicLong index = new AtomicLong();
> -
> /** The id of the first wicket tag inside the enclosure */
> private String childId;
>
> @@ -109,7 +100,7 @@ public final class EnclosureHandler extends AbstractMarkupFilter implements ICom
> // If open tag, than put the tag onto the stack
> if (tag.isOpen())
> {
> - tag.setId(tag.getId() + index.getAndIncrement());
> + tag.setId(tag.getId() + getRequestUniqueId());
> tag.setModified(true);
> tag.setAutoComponentFactory(FACTORY);
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/32a40bc1/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java
> index 0523d9a..554df3e 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java
> @@ -18,7 +18,6 @@ package org.apache.wicket.markup.parser.filter;
>
> import java.text.ParseException;
> import java.util.Iterator;
> -import java.util.concurrent.atomic.AtomicInteger;
>
> import org.apache.wicket.Component;
> import org.apache.wicket.MarkupContainer;
> @@ -109,14 +108,6 @@ public final class RelativePathPrefixHandler extends AbstractMarkupFilter
> }
> };
>
> -
> - /**
> - * https://issues.apache.org/jira/browse/WICKET-5724
> - *
> - * Unique index to generate new tag ids.
> - * */
> - private final AtomicInteger componentIndex = new AtomicInteger();
> -
> /**
> * Constructor for the IComponentResolver role.
> */
> @@ -164,7 +155,7 @@ public final class RelativePathPrefixHandler extends AbstractMarkupFilter
> if (tag.getId() == null)
> {
> tag.setId(getWicketRelativePathPrefix(null)
> - + componentIndex.getAndIncrement());
> + + getRequestUniqueId());
> tag.setAutoComponentTag(true);
> }
>
>
--
Become a Wicket expert, learn from the best: http://wicketinaction.com