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]