Hi Dennis:

A quick scan of the logic in NSStack looks OK to me...

When we get to a new element (while serializing or deserializing) the appropriate 
context will push() manually, to ensure a null on the stack.  Then each time we add() 
a mapping, push() gets called simply as a convenience to move the pointer forward and 
auto-grow the array.  Hence, calling clearFrame() first when we pop will back the 
stack up to the null at the beginning of the current frame.  Then the top-- after that 
backs the top up beyond the null (to the end of the last frame).  In general, I think 
the nulls-as-markers pattern is fine.  The only thing keeping another stack of frame 
indices around would buy us would be a quicker pop() when there are a lot of mappings 
on a given frame - not a huge deal.

There was an extraneous clearFrame() call in SerializationContextImpl, which I removed 
- don't know if that might have contributed to your issues.

If you still think there's a problem, the best thing to do is write up a small test 
case which demonstrates it (i.e. call NSStack APIs in the same order that we do while 
(de)serializing, and then check the size/top of the stack to make sure things look 
reasonable) and we can go from there.

Thanks for your attention to this stuff, btw.  I hope you get your build working and 
continue to find Axis a valuable place for your energies!

--Glen

> -----Original Message-----
> From: Dennis Sosnoski [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, December 11, 2002 4:43 PM
> To: [EMAIL PROTECTED]
> Subject: Re: cvs commit: xml-axis/java/src/org/apache/axis/utils
> NSStack.java
> 
> 
> Hi Glen,
> 
> Looks like you've put the namespace stack problem back in by 
> restoring 
> the original order of operations (call to clearFrame() before 
> decrementing top). Am I missing something here? The problem I saw was 
> that namespaces were pushed on the stack before the null 
> value, so the 
> null value had to be removed before calling clearFrame(). If you can 
> tell me what went wrong when the order was changed perhaps I 
> can suggest 
> an alternative fix. Sorry I didn't try this out with the whole test 
> suite myself, I'm hoping to get set up for full build this 
> next weekend.
> 
> This whole business of pushing nulls on the stack as markers 
> leaves me 
> uncomfortable. I'd prefer using two stacks, one for the actual 
> namespaces and one for the frames (as top of stack values for the 
> namespace stack). It's a substantial change to make without a good 
> reason, though.
> 
>   - Dennis
> 
> [EMAIL PROTECTED] wrote:
> 
> >gdaniels    2002/12/11 08:12:30
> >
> >  Modified:    java/src/org/apache/axis/providers/java 
> RPCProvider.java
> >               java/src/org/apache/axis/utils NSStack.java
> >  Log:
> >  Tweak NSStack fix, and throw the unwrapped exception if 
> deserializing
> >  from within RPCProvider.
> >  
> >
> 
> >  
> >  1.35      +3 -6      
> xml-axis/java/src/org/apache/axis/utils/NSStack.java
> >  
> >  Index: NSStack.java
> >  ===================================================================
> >  RCS file: 
> /home/cvs/xml-axis/java/src/org/apache/axis/utils/NSStack.java,v
> >  retrieving revision 1.34
> >  retrieving revision 1.35
> >  diff -u -r1.34 -r1.35
> >  --- NSStack.java   10 Dec 2002 17:22:03 -0000      1.34
> >  +++ NSStack.java   11 Dec 2002 16:12:30 -0000      1.35
> >  @@ -58,9 +58,6 @@
> >   import org.apache.commons.logging.Log;
> >   
> >   import java.util.ArrayList;
> >  -import java.util.Enumeration;
> >  -import java.util.Stack;
> >  -import java.util.Iterator;
> >   
> >   /**
> >    * The abstraction this class provides is a push down 
> stack of variable
> >  @@ -79,7 +76,7 @@
> >    * Accordingly, this stack is implemented as a single 
> array, will null
> >    * values used to indicate frame boundaries.
> >    *
> >  - * @author: James Snell
> >  + * @author James Snell
> >    * @author Glen Daniels ([EMAIL PROTECTED])
> >    * @author Sam Ruby ([EMAIL PROTECTED])
> >    */
> >  @@ -118,9 +115,9 @@
> >        * Remove the top frame from the stack.
> >        */
> >       public void pop() {
> >  -        top--;
> >  -
> >           clearFrame();
> >  +
> >  +        top--;
> >   
> >           if (top == 0) {
> >               if (log.isTraceEnabled())
> >  
> >  
> >  
> >
> >  
> >
> 

Reply via email to