You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by pr...@apache.org on 2003/06/22 21:40:40 UTC
cvs commit: jakarta-commons/jexl/src/java/org/apache/commons/jexl/util/introspection UberspectImpl.java
proyal 2003/06/22 12:40:40
Modified: jexl/src/java/org/apache/commons/jexl/parser ASTMethod.java
jexl/src/java/org/apache/commons/jexl/util/introspection
UberspectImpl.java
Log:
Fix 20729 - Rethrow exceptions from method execution rather than printing
to console.
Revision Changes Path
1.3 +15 -26 jakarta-commons/jexl/src/java/org/apache/commons/jexl/parser/ASTMethod.java
Index: ASTMethod.java
===================================================================
RCS file: /home/cvs/jakarta-commons/jexl/src/java/org/apache/commons/jexl/parser/ASTMethod.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ASTMethod.java 5 Aug 2002 12:41:08 -0000 1.2
+++ ASTMethod.java 22 Jun 2003 19:40:40 -0000 1.3
@@ -28,40 +28,29 @@
* returns the value of itself applied to the object.
* We assume that an identifier can be gotten via a get(String)
*/
- public Object execute(Object obj, JexlContext jc)
+ public Object execute(Object obj, JexlContext jc) throws Exception
{
String methodName = ((ASTIdentifier)jjtGetChild(0)).val;
- try
- {
- int paramCount = jjtGetNumChildren()-1;
-
- /*
- * get our params
- */
-
- Object params[] = new Object[paramCount];
-
- for (int i=0; i<paramCount; i++)
- {
- params[i] = ( (SimpleNode) jjtGetChild(i+1)).value(jc);
- }
+ int paramCount = jjtGetNumChildren()-1;
- VelMethod vm = Introspector.getUberspect().getMethod(obj, methodName,
- params, new Info("",1,1));
+ /*
+ * get our params
+ */
- if (vm == null)
- return null;
+ Object params[] = new Object[paramCount];
- return vm.invoke(obj, params);
- }
- catch(Exception e)
+ for (int i=0; i<paramCount; i++)
{
- System.out.println("ASTIdentifier : "+ e);
- e.printStackTrace();;
+ params[i] = ( (SimpleNode) jjtGetChild(i+1)).value(jc);
}
- return null;
- }
+ VelMethod vm = Introspector.getUberspect().getMethod(obj, methodName,
+ params, new Info("",1,1));
+ if (vm == null)
+ return null;
+
+ return vm.invoke(obj, params);
+ }
}
1.3 +23 -2 jakarta-commons/jexl/src/java/org/apache/commons/jexl/util/introspection/UberspectImpl.java
Index: UberspectImpl.java
===================================================================
RCS file: /home/cvs/jakarta-commons/jexl/src/java/org/apache/commons/jexl/util/introspection/UberspectImpl.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- UberspectImpl.java 9 Aug 2002 13:57:04 -0000 1.2
+++ UberspectImpl.java 22 Jun 2003 19:40:40 -0000 1.3
@@ -63,6 +63,7 @@
import org.apache.commons.logging.Log;
import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
import java.util.Collection;
import java.util.Map;
@@ -301,7 +302,27 @@
public Object invoke(Object o, Object[] params)
throws Exception
{
- return method.invoke(o, params);
+ try
+ {
+ return method.invoke(o, params);
+ }
+ catch( InvocationTargetException e )
+ {
+ final Throwable t = e.getTargetException();
+
+ if( t instanceof Exception )
+ {
+ throw (Exception)t;
+ }
+ else if (t instanceof Error)
+ {
+ throw (Error)t;
+ }
+ else
+ {
+ throw e;
+ }
+ }
}
public boolean isCacheable()
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org