[ http://issues.apache.org/jira/browse/XALANJ-1811?page=all ]
Brian Minchau updated XALANJ-1811:
----------------------------------
Fix Version: 2.7
(was: CurrentCVS)
> JavaDoc for CachedXPathAPI should state it's not thread-safe
> ------------------------------------------------------------
>
> Key: XALANJ-1811
> URL: http://issues.apache.org/jira/browse/XALANJ-1811
> Project: XalanJ2
> Type: Bug
> Components: XPath
> Versions: 2.2.x
> Environment: Operating System: Windows NT/2K
> Platform: PC
> Reporter: Frank Tewissen
> Fix For: 2.7
>
> Version: Xalan bundled with jdk1.4.2_02 (crimson parser)
> Using an instance of the CachedXPathAPI class from within multiple threads on
> a
> document that is not changed at runtime, causes inconsistent behaviour.
> The source code below reproduces that problem on Windows NT (same is true for
> Linux RedHat7.3). Hint: I was only able to reproduce the problem when using a
> condition (e.g. [EMAIL PROTECTED]'a']) in the xpath statement.
> ----------------------------------------------------------
> import java.io.*;
> import javax.xml.parsers.*;
> import org.apache.xpath.CachedXPathAPI;
> import org.w3c.dom.*;
> import org.xml.sax.*;
> public class CachedXPathAPITest {
> private static final String XML = "<document><node id='a'>a</node><node
> id='b'>b</node><node id='c'>c</node></document>";
> private CachedXPathAPI _api;
> private Document _doc;
> public CachedXPathAPITest() throws Exception {
> _api = new CachedXPathAPI();
> DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
> DocumentBuilder parser = factory.newDocumentBuilder();
> _doc = parser.parse(new InputSource(new StringReader(XML)));
> Thread t = null;
> for (int i=0; i<200; i++)
> t = new TestThread(_api, _doc);
> t.join();
> }
> public static void main(String[] args) throws Exception {
> new CachedXPathAPITest();
> }
> class TestThread extends Thread {
> private CachedXPathAPI _api;
> private Document _doc;
> TestThread(CachedXPathAPI api, Document doc) {
> _api = api;
> _doc = doc;
> start();
> }
> public void run() {
> try {
> for (int i=0; i<100; i++) {
> String a = _api.eval(_doc, "/document/[EMAIL
> PROTECTED]'a']").str();
> if (!a.equals("a"))
> throw new RuntimeException(a + "!=a");
> String b = _api.eval(_doc, "/document/[EMAIL
> PROTECTED]'b']").str();
> if (!b.equals("b"))
> throw new RuntimeException(b + "!=b");
> String c = _api.eval(_doc, "/document/[EMAIL
> PROTECTED]'c']").str();
> if (!c.equals("c"))
> throw new RuntimeException(c + "!=c");
> }
> } catch (Exception e) {
> System.err.println(e);
> }
> }
> }
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]