dion 2004/08/11 21:25:43 Modified: jelly/src/test/org/apache/commons/jelly/core testInvokeTag.jelly TestInvokeStaticTag.java TestInvokeTag.java testInvokeStaticTag.jelly jelly/src/java/org/apache/commons/jelly/tags/core InvokeStaticTag.java InvokeTag.java Added: jelly/src/test/org/apache/commons/jelly/core ExceptionBean.java Log: Apply JELLY-116. Revision Changes Path 1.4 +19 -0 jakarta-commons/jelly/src/test/org/apache/commons/jelly/core/testInvokeTag.jelly Index: testInvokeTag.jelly =================================================================== RCS file: /home/cvs/jakarta-commons/jelly/src/test/org/apache/commons/jelly/core/testInvokeTag.jelly,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- testInvokeTag.jelly 25 Feb 2004 05:09:57 -0000 1.3 +++ testInvokeTag.jelly 12 Aug 2004 04:25:42 -0000 1.4 @@ -59,5 +59,24 @@ <j:arg><j:invoke on="${list}" method="get" var="argtwo"><j:arg type="int" value="1"/></j:invoke></j:arg> </j:new> </j:if> + + <j:if test="${test.invokeThatThrowsException}"> + <j:set var="exceptionMessage" value="method threw an exception"/> + <j:new var="exceptionBean" className="org.apache.commons.jelly.core.ExceptionBean"/> + <j:catch var="jellyException"> + <j:invoke on="${exceptionBean}" method="instanceMethod" exceptionVar="exceptionThrown"> + <j:arg value="${exceptionMessage}"/> + </j:invoke> + </j:catch> + </j:if> + <j:if test="${test.invokeThatDoesNotHandleException}"> + <j:set var="exceptionMessage" value="method threw an exception"/> + <j:new var="exceptionBean" className="org.apache.commons.jelly.core.ExceptionBean"/> + <j:catch var="jellyException"> + <j:invoke on="${exceptionBean}" method="instanceMethod"> + <j:arg value="${exceptionMessage}"/> + </j:invoke> + </j:catch> + </j:if> </j:jelly> 1.5 +30 -1 jakarta-commons/jelly/src/test/org/apache/commons/jelly/core/TestInvokeStaticTag.java Index: TestInvokeStaticTag.java =================================================================== RCS file: /home/cvs/jakarta-commons/jelly/src/test/org/apache/commons/jelly/core/TestInvokeStaticTag.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- TestInvokeStaticTag.java 24 Feb 2004 14:19:58 -0000 1.4 +++ TestInvokeStaticTag.java 12 Aug 2004 04:25:42 -0000 1.5 @@ -99,4 +99,33 @@ assertTrue( getJellyContext().getVariable("message").equals("Is not Jelly the coolest thing you have ever used?") ); } + + public void testInvokeThatThrowsException() throws Exception { + setUpScript( "testInvokeStaticTag.jelly" ); + Script script = getJelly().compileScript(); + getJellyContext().setVariable("test.invokeThatThrowsException",Boolean.TRUE); + script.run(getJellyContext(),getXMLOutput()); + String exceptionMessage = (String) getJellyContext().getVariable("exceptionMessage"); + assertNotNull( exceptionMessage ); + Exception jellyException = (Exception) getJellyContext().getVariable("jellyException"); + assertNull( jellyException ); + Exception exception = (Exception) getJellyContext().getVariable("exceptionThrown"); + assertNotNull( exception ); + assertEquals( exceptionMessage, exception.getMessage() ); + } + + public void testInvokeThatDoesNotHandleException() throws Exception { + setUpScript( "testInvokeStaticTag.jelly" ); + Script script = getJelly().compileScript(); + getJellyContext().setVariable("test.invokeThatDoesNotHandleException",Boolean.TRUE); + script.run(getJellyContext(),getXMLOutput()); + String exceptionMessage = (String) getJellyContext().getVariable("exceptionMessage"); + assertNotNull( exceptionMessage ); + Exception jellyException = (Exception) getJellyContext().getVariable("jellyException"); + assertNotNull( jellyException ); + assertTrue( "messages are the same", ! exceptionMessage.equals(jellyException.getMessage()) ); + assertTrue( "exception '" + jellyException.getMessage() + "' does not ends with '" + + exceptionMessage+"'", jellyException.getMessage().endsWith(exceptionMessage) ); + } + } 1.5 +32 -1 jakarta-commons/jelly/src/test/org/apache/commons/jelly/core/TestInvokeTag.java Index: TestInvokeTag.java =================================================================== RCS file: /home/cvs/jakarta-commons/jelly/src/test/org/apache/commons/jelly/core/TestInvokeTag.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- TestInvokeTag.java 24 Feb 2004 14:19:58 -0000 1.4 +++ TestInvokeTag.java 12 Aug 2004 04:25:42 -0000 1.5 @@ -93,5 +93,36 @@ assertNotNull(getJellyContext().getVariable("argtwo")); assertEquals("Chicago",getJellyContext().getVariable("argtwo")); } + + public void testInvokeThatThrowsException() throws Exception { + setUpScript("testInvokeTag.jelly"); + Script script = getJelly().compileScript(); + getJellyContext().setVariable("test.invokeThatThrowsException",Boolean.TRUE); + script.run(getJellyContext(),getXMLOutput()); + String exceptionMessage = (String) getJellyContext().getVariable("exceptionMessage"); + assertNotNull( exceptionMessage ); + assertNotNull( getJellyContext().getVariable("exceptionBean")); + Exception jellyException = (Exception) getJellyContext().getVariable("jellyException"); + assertNull( jellyException ); + Exception exception = (Exception) getJellyContext().getVariable("exceptionThrown"); + assertNotNull( exception ); + assertEquals( exceptionMessage, exception.getMessage() ); + } + + public void testInvokeThatDoesNotHandleException() throws Exception { + setUpScript("testInvokeTag.jelly"); + Script script = getJelly().compileScript(); + getJellyContext().setVariable("test.invokeThatDoesNotHandleException",Boolean.TRUE); + script.run(getJellyContext(),getXMLOutput()); + String exceptionMessage = (String) getJellyContext().getVariable("exceptionMessage"); + assertNotNull( exceptionMessage ); + assertNotNull( getJellyContext().getVariable("exceptionBean")); + Exception jellyException = (Exception) getJellyContext().getVariable("jellyException"); + assertNotNull( jellyException ); + assertTrue( "messages are the same", ! exceptionMessage.equals(jellyException.getMessage()) ); + assertTrue( "exception '" + jellyException.getMessage() + "' does not ends with '" + + exceptionMessage+"'", jellyException.getMessage().endsWith(exceptionMessage) ); + } + } 1.3 +19 -0 jakarta-commons/jelly/src/test/org/apache/commons/jelly/core/testInvokeStaticTag.jelly Index: testInvokeStaticTag.jelly =================================================================== RCS file: /home/cvs/jakarta-commons/jelly/src/test/org/apache/commons/jelly/core/testInvokeStaticTag.jelly,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- testInvokeStaticTag.jelly 25 Feb 2004 05:09:57 -0000 1.2 +++ testInvokeStaticTag.jelly 12 Aug 2004 04:25:42 -0000 1.3 @@ -35,5 +35,24 @@ <j:arg value="${args}" />
</j:invokeStatic> </j:if> + + <j:if test="${test.invokeThatThrowsException}"> + <j:set var="exceptionMessage" value="method threw an exception"/> + <j:catch var="jellyException"> + <j:invokeStatic className="org.apache.commons.jelly.core.ExceptionBean" method="staticMethod" exceptionVar="exceptionThrown"> + <j:arg value="${exceptionMessage}"/> + </j:invokeStatic> + </j:catch> + </j:if> + <j:if test="${test.invokeThatDoesNotHandleException}"> + <j:set var="exceptionMessage" value="method threw an exception"/> + <j:catch var="jellyException"> + <j:invokeStatic className="org.apache.commons.jelly.core.ExceptionBean" method="staticMethod"> + <j:arg value="${exceptionMessage}"/> + </j:invokeStatic> + </j:catch> + </j:if> + + </j:jelly> 1.1 jakarta-commons/jelly/src/test/org/apache/commons/jelly/core/ExceptionBean.java Index: ExceptionBean.java =================================================================== /* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.commons.jelly.core; /** * A sample bean that throws exceptions when its methods are invoked. */ public class ExceptionBean { public ExceptionBean() { } public void instanceMethod( String msg) throws Exception { throw new Exception( msg ); } public static void staticMethod( String msg) throws Exception { throw new Exception( msg ); } } 1.6 +17 -2 jakarta-commons/jelly/src/java/org/apache/commons/jelly/tags/core/InvokeStaticTag.java Index: InvokeStaticTag.java =================================================================== RCS file: /home/cvs/jakarta-commons/jelly/src/java/org/apache/commons/jelly/tags/core/InvokeStaticTag.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- InvokeStaticTag.java 24 Feb 2004 14:10:40 -0000 1.5 +++ InvokeStaticTag.java 12 Aug 2004 04:25:43 -0000 1.6 @@ -49,6 +49,9 @@ /** the variable exported */ private String var; + /** the variable where the method's exception is exported */ + private String exceptionVar; + /** the method to invoke */ private String methodName; @@ -70,6 +73,13 @@ this.var = var; } + /** Sets the name of a variable that exports the exception thrown by + * the method's invocation (if any) + */ + public void setExceptionVar(String var) { + this.exceptionVar = var; + } + /** * Sets the name of the method to invoke * @@ -131,7 +141,12 @@ throw createLoadClassFailedException(e); } catch (InvocationTargetException e) { - throw createLoadClassFailedException(e); + if(null != exceptionVar) { + context.setVariable(exceptionVar,e.getTargetException()); + } else { + throw new JellyTagException("method " + methodName + + " threw exception: "+ e.getTargetException().getMessage(), e ); + } } finally { paramTypes.clear(); 1.7 +21 -5 jakarta-commons/jelly/src/java/org/apache/commons/jelly/tags/core/InvokeTag.java Index: InvokeTag.java =================================================================== RCS file: /home/cvs/jakarta-commons/jelly/src/java/org/apache/commons/jelly/tags/core/InvokeTag.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- InvokeTag.java 24 Feb 2004 14:10:38 -0000 1.6 +++ InvokeTag.java 12 Aug 2004 04:25:43 -0000 1.7 @@ -35,6 +35,9 @@ /** the variable exported */ private String var; + /** the variable where the method's exception is exported */ + private String exceptionVar; + /** the method to invoke */ private String methodName; @@ -52,6 +55,13 @@ this.var = var; } + /** Sets the name of a variable that exports the exception thrown by + * the method's invocation (if any) + */ + public void setExceptionVar(String var) { + this.exceptionVar = var; + } + public void setMethod(String method) { this.methodName = method; } @@ -91,11 +101,17 @@ throw new JellyTagException(e); } catch (InvocationTargetException e) { - throw new JellyTagException(e); + if(null != exceptionVar) { + context.setVariable(exceptionVar,e.getTargetException()); + } else { + throw new JellyTagException("method " + methodName + + " threw exception: "+ e.getTargetException().getMessage(), e ); + } + } + finally { + paramTypes.clear(); + paramValues.clear(); } - - paramTypes.clear(); - paramValues.clear(); ArgTag parentArg = (ArgTag)(findAncestorWithClass(ArgTag.class)); if(null != parentArg) { --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]