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