Anonymous avatar Anonymous committed f0b942c

Handing result creation better so that ognl exceptions, like in the
case of the Struts 2 action redirect result, won't thrown warn messages
WW-1714

git-svn-id: http://svn.opensymphony.com/svn/xwork/branches/2.0@1509 e221344d-f017-0410-9bd5-d282ab1896d7

Comments (0)

Files changed (1)

src/java/com/opensymphony/xwork2/ObjectFactory.java

 import java.util.HashMap;
 import java.util.Map;
 
+import ognl.OgnlException;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 
         if (resultClassName != null) {
             result = (Result) buildBean(resultClassName, extraContext);
-            OgnlUtil.setProperties(resultConfig.getParams(), result, extraContext);
+            try {
+            	OgnlUtil.setProperties(resultConfig.getParams(), result, extraContext, true);
+            } catch (XWorkException ex) {
+            	Throwable reason = ex.getCause();
+            	if (reason instanceof OgnlException)
+            	{
+            		// ognl exceptions could be thrown and be ok if, for example, the result uses parameters in ways other than
+            		// as properties for the result object.  For example, the redirect result from Struts 2 allows any parameters
+            		// to be set on the result, which it appends to the redirecting url.  These parameters wouldn't have a 
+            		// corresponding setter on the result object, so an OGNL exception could be thrown.  Still, this is a misuse
+            		// of exceptions, so we should look at improving it.
+            		LOG.debug(ex.getMessage(), reason);
+            	} else {
+            		throw ex;
+            	}
+            }
         }
 
         return result;
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.