Author: drobiazko Date: Sat Mar 6 19:40:50 2010 New Revision: 919830 URL: http://svn.apache.org/viewvc?rev=919830&view=rev Log: TAP5-919: Calling MarkupWriter.element() with an even number of arguments throws ArrayIndexOutOfBounds exception, not a useful exception about omitting a attribute name or value
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MarkupWriterImpl.java tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ServicesMessages.java tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/internal/services/ServicesStrings.properties tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/MarkupWriterImplTest.java Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MarkupWriterImpl.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MarkupWriterImpl.java?rev=919830&r1=919829&r2=919830&view=diff ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MarkupWriterImpl.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MarkupWriterImpl.java Sat Mar 6 19:40:50 2010 @@ -117,8 +117,13 @@ ensureCurrentElement(); int i = 0; + + int length = namesAndValues.length; + + if(length % 2 != 0) + throw new IllegalArgumentException(ServicesMessages.markupWriterAttributeNameOrValueOmitted(current.getName(), namesAndValues)); - while (i < namesAndValues.length) + while (i < length) { // name should never be null. Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ServicesMessages.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ServicesMessages.java?rev=919830&r1=919829&r2=919830&view=diff ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ServicesMessages.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ServicesMessages.java Sat Mar 6 19:40:50 2010 @@ -29,6 +29,7 @@ import org.apache.tapestry5.runtime.RenderCommand; import org.apache.tapestry5.services.TransformMethodSignature; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Locale; @@ -359,4 +360,9 @@ { return MESSAGES.get("link-rewrite-returned-null"); } + + public static String markupWriterAttributeNameOrValueOmitted(String element, Object[] namesAndValues) + { + return MESSAGES.format("markup-writer-attribute-name-or-value-omitted", element, InternalUtils.join(Arrays.asList(namesAndValues))); + } } Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/internal/services/ServicesStrings.properties URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/internal/services/ServicesStrings.properties?rev=919830&r1=919829&r2=919830&view=diff ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/internal/services/ServicesStrings.properties (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/internal/services/ServicesStrings.properties Sat Mar 6 19:40:50 2010 @@ -85,3 +85,4 @@ literal-conduit-not-updateable=Literal values are not updateable. request-rewrite-returned-null=URLRewriterRule.process returned null while processing incoming request link-rewrite-returned-null=URLRewriterRule.process returned null while processing outbound link. +markup-writer-attribute-name-or-value-omitted=Writing attributes of the element '%s' failed. A attribute name or value is omitted [%s]. Please provide an even number of values, alternating names and values Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/MarkupWriterImplTest.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/MarkupWriterImplTest.java?rev=919830&r1=919829&r2=919830&view=diff ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/MarkupWriterImplTest.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/MarkupWriterImplTest.java Sat Mar 6 19:40:50 2010 @@ -183,6 +183,27 @@ assertEquals(w.toString(), "<root gnip=\"gnop\" foo=\"bar\"></root>"); } + + @Test + public void attributes_odd_number() + { + MarkupWriter w = new MarkupWriterImpl(); + + w.element("img"); + + try + { + w.attributes("src", "foo.png", "width", 20, 30); + unreachable(); + } + catch (RuntimeException ex) + { + assertMessageContains(ex, + "Writing attributes of the element 'img' failed.", + "A attribute name or value is omitted [src, foo.png, width, 20, 30].", + "Please provide an even number of values, alternating names and values"); + } + } @Test public void comment()