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, <adelb...@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 <adelb...@apache.org> > Authored: Sat May 16 17:14:45 2015 +0200 > Committer: Andrea Del Bene <adelb...@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