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

Reply via email to