svn commit: r778359 - /jakarta/taglibs/sandbox/unstandard/trunk/src/main/java/org/apache/taglibs/unstandard/SizeTag.java

[email protected] Mon, 25 May 2009 09:06:27 -0000
Newsgroups gmane.comp.jakarta.taglibs.devel
Message-ID <[email protected]>
Author: bayard
Date: Mon May 25 09:06:26 2009
New Revision: 778359

URL: http://svn.apache.org/viewvc?rev=778359&view=rev
Log:
Fixing bugzilla entry 45433. SizeTag doesn't accept arrays

Modified:
    jakarta/taglibs/sandbox/unstandard/trunk/src/main/java/org/apache/taglibs/unstandard/SizeTag.java

Modified: jakarta/taglibs/sandbox/unstandard/trunk/src/main/java/org/apache/taglibs/unstandard/SizeTag.java
URL: http://svn.apache.org/viewvc/jakarta/taglibs/sandbox/unstandard/trunk/src/main/java/org/apache/taglibs/unstandard/SizeTag.java?rev=778359&r1=778358&r2=778359&view=diff
==============================================================================
--- jakarta/taglibs/sandbox/unstandard/trunk/src/main/java/org/apache/taglibs/unstandard/SizeTag.java (original)
+++ jakarta/taglibs/sandbox/unstandard/trunk/src/main/java/org/apache/taglibs/unstandard/SizeTag.java Mon May 25 09:06:26 2009
@@ -75,8 +75,15 @@
             if(target instanceof String) {
                 result = ( (String)target ).length();
             } else
-            if(target instanceof Collection) {
-                result = ( (Object[])target ).length;
+            if(target.getClass().isArray()) {
+                try {
+                    Field lengthField = target.getClass().getField("length");
+                    result = lengthField.getInt(target);
+                } catch(NoSuchFieldException nsfe) {
+                    throw new JspException("Array found without a length field", nsfe);
+                } catch(IllegalAccessException iae) {
+                    throw new JspException("Array found with a non-accessible length field", iae);
+                }
             }
         }
         if(var == null && result != -1) {