mmidy       02/01/25 11:05:47

  Modified:    java/src/org/apache/xalan/transformer TransformerImpl.java
  Log:
  Bug 5982 and 6022. The variable stack was not being cleared accross 
transforms so that when the transformer is reused, we were using nodesets from 
the previous transform which were using a different DTM. Note that we want keep 
any variables that have been set externally by the user (using 
Transformer.setParameter()).
  
  Revision  Changes    Path
  1.118     +40 -0     
xml-xalan/java/src/org/apache/xalan/transformer/TransformerImpl.java
  
  Index: TransformerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/TransformerImpl.java,v
  retrieving revision 1.117
  retrieving revision 1.118
  diff -u -r1.117 -r1.118
  --- TransformerImpl.java      23 Jan 2002 22:53:46 -0000      1.117
  +++ TransformerImpl.java      25 Jan 2002 19:05:47 -0000      1.118
  @@ -467,7 +467,10 @@
         m_stackGuard = new StackGuard();
   
         m_xcontext.reset();
  +      m_xcontext.getVarStack().clearLocalSlots(0, 
m_xcontext.getVarStack().size());
  +      resetUserParameters();
         m_xcontext.getVarStack().reset();
  +      
   
         int n = m_currentTemplateElements.length;
         for (int i = 0; i < n; i++) 
  @@ -1509,6 +1512,43 @@
   
         // Should throw some sort of an error.
         return null;
  +    }
  +  }
  +  
  +  /**
  +   * Reset parameters that the user specified for the transformation.
  +   * Called during transformer.reset() after we have cleared the 
  +   * variable stack. We need to make sure that user params are
  +   * reset so that the transformer object can be reused. 
  +   */
  +  private void resetUserParameters()
  +  {
  +
  +    try
  +    {
  +      
  +      if (null == m_userParams)
  +        return;
  +
  +      int n = m_userParams.size();
  +      for (int i = n - 1; i >= 0; i--)
  +      {
  +        Arg arg = (Arg) m_userParams.elementAt(i);
  +        QName name = arg.getQName();
  +        // The first string might be the namespace, or it might be 
  +        // the local name, if the namespace is null.
  +        String s1 = name.getNamespace();
  +        String s2 = name.getLocalPart();
  +
  +        setParameter(s2, s1, arg.getVal().object());
  +        
  +      }
  +      
  +    }
  +    catch (java.util.NoSuchElementException nsee)
  +    {
  +      // Should throw some sort of an error.
  +      
       }
     }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to