[
https://issues.apache.org/jira/browse/DIGESTER-182?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Barney Barumba updated DIGESTER-182:
------------------------------------
Description:
There is a discrepancy between the way push() and pop() interact with the root
object when stack actions are used to change the object.
* If a stack action changes the root object when being pushed onto the stack
then the root reference is set to the changed object.
* If a stack action changes the root object when being popped from the stack
then the root reference is not updated.
The attached patch fixes the digester to update the root reference when popping
the last element fron the stack. It simply adds 4 lines to Digester.pop():
{code}
public <T> T pop()
{
try
{
T popped = this.<T> npeSafeCast( stack.pop() );
if ( stackAction != null )
{
popped = stackAction.onPop( this, null, popped );
}
+ if ( stack.size() == 0 )
+ {
+ root = popped;
+ }
return popped;
}
catch ( EmptyStackException e )
{
log.warn( "Empty stack (returning null)" );
return ( null );
}
}
{code}
Patch also contains a test case: {{DigesterTestCase.testStackActionRoot()}}.
was:
There is a discrepancy between the way push() and pop() interact with the root
object when stack actions are used to change the object.
* If a stack action changes the root object when being pushed onto the stack
then the root reference is set to the changed object.
* If a stack action changes the root object when being popped from the stack
then the root reference is not updated.
The attached patch fixes the digester to update the root reference when popping
the last element fron the stack. It simply adds 4 lines to Digester.pop()
{code}
public <T> T pop()
{
try
{
T popped = this.<T> npeSafeCast( stack.pop() );
if ( stackAction != null )
{
popped = stackAction.onPop( this, null, popped );
}
+ if ( stack.size() == 0 )
+ {
+ root = popped;
+ }
return popped;
}
catch ( EmptyStackException e )
{
log.warn( "Empty stack (returning null)" );
return ( null );
}
}
{code}
Patch also contains a test case: {{DigesterTestCase.testStackActionRoot()}}.
> Popping the last object off the stack should update the root reference
> ----------------------------------------------------------------------
>
> Key: DIGESTER-182
> URL: https://issues.apache.org/jira/browse/DIGESTER-182
> Project: Commons Digester
> Issue Type: Bug
> Affects Versions: 3.2
> Environment: Linux x_86_64, JDK 1.7.0_65
> Reporter: Barney Barumba
> Attachments: DIGESTER-182.patch
>
>
> There is a discrepancy between the way push() and pop() interact with the
> root object when stack actions are used to change the object.
> * If a stack action changes the root object when being pushed onto the stack
> then the root reference is set to the changed object.
> * If a stack action changes the root object when being popped from the stack
> then the root reference is not updated.
> The attached patch fixes the digester to update the root reference when
> popping the last element fron the stack. It simply adds 4 lines to
> Digester.pop():
> {code}
> public <T> T pop()
> {
> try
> {
> T popped = this.<T> npeSafeCast( stack.pop() );
> if ( stackAction != null )
> {
> popped = stackAction.onPop( this, null, popped );
> }
> + if ( stack.size() == 0 )
> + {
> + root = popped;
> + }
> return popped;
> }
> catch ( EmptyStackException e )
> {
> log.warn( "Empty stack (returning null)" );
> return ( null );
> }
> }
> {code}
> Patch also contains a test case: {{DigesterTestCase.testStackActionRoot()}}.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)