You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mm...@apache.org on 2002/01/25 20:05:47 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/transformer TransformerImpl.java

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: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org