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