Kevin Conroy created WW-4174:
--------------------------------

             Summary: Make OgnlValueStack and OgnlValueStackFactory More 
Extensible
                 Key: WW-4174
                 URL: https://issues.apache.org/jira/browse/WW-4174
             Project: Struts 2
          Issue Type: Bug
          Components: Value Stack
    Affects Versions: 2.3.15.1
            Reporter: Kevin Conroy


I'm not trying to reopen XW-613 and have taken the advice from the mailing list 
seriously about not just requesting changes to the default behavior or log 
levels.

http://mail-archives.apache.org/mod_mbox/struts-user/200907.mbox/%[email protected]%3E

Instead, I'd like to propose changing some private methods in OgnlValueStack to 
be protected so that developers can more easily extend OgnlValueStack to 
implement their desired logging/warning/exception behavior for their 
application.

I'd like to propose that the following methods in OgnlValueStack (currently 
private in scope) should be changed to protected:

{code}
protected void handleRuntimeException(String expr, Object value, boolean 
throwExceptionOnFailure, RuntimeException re)
protected void handleOgnlException(String expr, Object value, boolean 
throwExceptionOnFailure, OgnlException e)
protected void setupExceptionOnFailure(boolean throwExceptionOnFailure)
protected Object handleOtherException(String expr, boolean 
throwExceptionOnFailure, Exception e)
protected Object handleOgnlException(String expr, boolean 
throwExceptionOnFailure, OgnlException e)
protected boolean shouldLogNoSuchPropertyWarning(OgnlException e)
protected Object findInContext(String name)
{code}

Additionally, to enable the OgnlValueStackFactory to be easily extended to 
return any overridden OgnlValueStack implementations, the currently private 
data members should be given protected getters:

{code}

   protected XWorkConverter getXworkConverter()
   {
      return xworkConverter;
   }

   protected CompoundRootAccessor getCompoundRootAccessor()
   {
      return compoundRootAccessor;
   }

   protected TextProvider getTextProvider()
   {
      return textProvider;
   }

   protected Container getContainer()
   {
      return container;
   }

   protected boolean isAllowStaticMethodAccess()
   {
      return allowStaticMethodAccess;
   }
{code}

This would allow developers like myself to more easily extend and override 
behavior to better fit our own desired notification levels. For example, these 
changes would allow me to set it up to provide info level warnings in the log 
file while suppressing the exception that gets thrown.

Protected level scope ensures that my custom extensions can more easily inherit 
bug fixes and behavior changes from future versions.

Thanks!

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to