Anonymous avatar Anonymous committed ac43080

XW-155: Catching exceptions thrown when evaluating expressions against the ValueStack and returning null w/ a warning

git-svn-id: http://svn.opensymphony.com/svn/xwork/trunk@193 e221344d-f017-0410-9bd5-d282ab1896d7

Comments (0)

Files changed (2)

src/java/com/opensymphony/xwork/util/OgnlValueStack.java

 import java.util.Iterator;
 import java.util.Map;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 
 /**
  *
     public static final String VALUE_STACK = "com.opensymphony.xwork.util.OgnlValueStack.ValueStack";
     public static final String REPORT_ERRORS_ON_NO_PROP = "com.opensymphony.xwork.util.OgnlValueStack.ReportErrorsOnNoProp";
     private static CompoundRootAccessor accessor;
+    private static Log LOG = LogFactory.getLog(OgnlValueStack.class);
 
     static {
         accessor = new CompoundRootAccessor();
             return Ognl.getValue(OgnlUtil.compile(expr), context, root);
         } catch (OgnlException e) {
             return null;
+        } catch (Exception e) {
+            LOG.warn("Caught an exception while evaluating expression '" + expr + "' against value stack", e);
+            return null;
         }
     }
 
             return Ognl.getValue(OgnlUtil.compile(expr), context, root, asType);
         } catch (OgnlException e) {
             return null;
+        } catch (Exception e) {
+            LOG.warn("Caught an exception while evaluating expression '" + expr + "' against value stack", e);
+            return null;
         }
     }
 

src/test/com/opensymphony/xwork/util/OgnlValueStackTest.java

         assertEquals("OK", stack.findValue("exceptionMethod()"));
     }
 
+    public void testCallMethodOnNullObject() {
+        OgnlValueStack stack = new OgnlValueStack();
+        assertNull(stack.findValue("foo.size()"));
+    }
+
     public void testCallMethodWithNullArg() {
         SimpleAction action = new SimpleAction();
         OgnlValueStack stack = new OgnlValueStack();
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.