On 7/19/07, Thomas Drevon <thomas.drevon(a)intermedia.uio.no> wrote:
Hi!
I've made a panel that displays tags in a tag cloud (size relative to
occurrence). But on a few occasions I get an exception, and I've managed
to pinpoint fairly accurately under what circumstance. The code
involved, that usually works is this:
[snip...]
Method sort threw exception for reference $xwiki in
template XWiki.XWikiLogin at [6,24]
org.apache.velocity.exception.MethodInvocationException: Invocation of method
'sort' in
class com.xpn.xwiki.api.XWiki threw exception java.lang.NullPointerException
[snip..]
Caused by: java.lang.NullPointerException
at java.util.Collections.sort(Collections.java:116)
at com.xpn.xwiki.api.XWiki.sort(XWiki.java:1676)
I've seen a few of these, and it doesn't really have anything to do
with the $xwiki reference (though perhaps the code should be changed
to avoid that misleading message..). The original cause is an NPE
originating out of Collections.sort, which is called by XWiki.sort:
XWiki.sort:
public List sort(List list)
{
Collections.sort(list);
return list;
}
Collections.sort doesn't appear to check for null:
public static <T extends Comparable<? super T>> void sort(List<T>
list) {
Object[] a = list.toArray();
Arrays.sort(a);
Seems to me like your panel needs to make sure your list is non-null
(not empty) before calling xwiki.sort
The recommended (from the velocity docs) way to check for non-null && not empty:
#if( "$!allTags" != '')
#set( $allTagsSorted = $xwiki.sort($allTags))
#end
That should solve the problem.
--
'Waste of a good apple' -Samwise Gamgee