<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-11891</id>
	<title>Nabble - codehaus - Jaxen</title>
	<updated>2009-11-05T06:01:55Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/codehaus---Jaxen-f11891.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/codehaus---Jaxen-f11891.html" />
	<subtitle type="html">The jaxen project is a Java XPath Engine. jaxen is a universal object model walker, capable of evaluating XPath expressions across multiple models. codehaus - Jaxen home is &lt;a href=&quot;http://jaxen.codehaus.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.</subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26215126</id>
	<title>[jira] Updated: (JAXEN-149) Upgrade to Maven 2</title>
	<published>2009-11-05T06:01:55Z</published>
	<updated>2009-11-05T06:01:55Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-149?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-149?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Aleksander Adamowski updated JAXEN-149:
&lt;br&gt;---------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: 0001-Specified-groupId-and-version-for-reporting-plugins.patch
&lt;br&gt;&lt;br&gt;Brian, in my environment the site build (actually site:stage) would fail unless I'd specify the groupIds and stable versions of relevant plugins.
&lt;br&gt;&lt;br&gt;&lt;br&gt;Have a look at attached patch. With those changes applied, jaxen.codehaus.org site gets built properly on my machine in target/staging/jaxen.codehaus.org/home/projects/jaxen/public_html/.
&lt;br&gt;&lt;br&gt;One should specify plugin versions anyway, to make the build repeatable. Also, specifying groupId is a good practice as it sometimes creates problems in resolving plugin dependencies (the site is notorious for that).
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Upgrade to Maven 2
&lt;br&gt;&amp;gt; ------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-149
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-149&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-149&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Task
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Build
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Elliotte Rusty Harold
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 1.1.3
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: 0001-maven-2-build-support.patch, 0001-Specified-groupId-and-version-for-reporting-plugins.patch, jaxen-maven2-upgrade.patch, mvn.patch, pom.xml
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; One of these days we should move forward to Maven 2, but not for Jaxen 1.1. 
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-149%29-Upgrade-to-Maven-2-tp5150339p26215126.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26131192</id>
	<title>[jira] Commented: (JAXEN-88) Early termination with positional predicates</title>
	<published>2009-10-30T07:38:26Z</published>
	<updated>2009-10-30T07:38:26Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-88?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=196666#action_196666&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-88?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=196666#action_196666&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Brian Ewins commented on JAXEN-88:
&lt;br&gt;----------------------------------
&lt;br&gt;&lt;br&gt;Not entirely. JAXEN-31 helps if the user avoids using last() (for example) since we don't have to touch all the nodes. My comment above is that this optimisation is one of family of transformations like these:
&lt;br&gt;&lt;br&gt;count(x) &amp;lt; y is equivalent to: for (node in x) { count++; if (!(count &amp;lt; y)) {return false} } return true;
&lt;br&gt;&lt;br&gt;and
&lt;br&gt;&lt;br&gt;count(x) == y is equivalent to: for (node in x) { count++; if (count &amp;gt; y) {return false} } return count == y;
&lt;br&gt;&lt;br&gt;These loops terminate early without hitting every node in x. There's no way for the user to express this intent in xpath, unless we add some extension functions:
&lt;br&gt;&lt;br&gt;count(x) &amp;lt; y is equivalent to: count-between(x, 0, y - 1) 
&lt;br&gt;count(x) == y is equivalent to: count-between(x, y, y)
&lt;br&gt;&lt;br&gt;Where count-between(x, ymin, ymax) is defined as:
&lt;br&gt;for (node in x) { count++; if (count &amp;gt; ymax) {return false} } return count &amp;gt;= ymin;
&lt;br&gt;&lt;br&gt;...once we have these, we can get the optimisation by transforming the parse tree to use these functions wherever theres a count() comparison. Even after JAXEN-31 lands, this is still a win.
&lt;br&gt;&lt;br&gt;Re the bug title, 'early termination with positional predicates'... we /may/ have that one covered. There are still some internal uses of size() in jaxen, I'd have to check.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Early termination with positional predicates
&lt;br&gt;&amp;gt; --------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-88
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-88&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-88&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: core
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Elliotte Rusty Harold
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 2.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Michael Kay describes a Saxon optimization in this article on developerWorks:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://www-106.ibm.com/developerworks/library/x-xslt2/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www-106.ibm.com/developerworks/library/x-xslt2/&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;quot;A predicate such as para[position() &amp;lt;= 3] selects the first three &amp;lt;para&amp;gt; children of the current node. It is not necessary to apply this predicate explicitly to every &amp;lt;para&amp;gt; element to see if it is true, since processing can stop after the third node.&amp;quot;
&lt;br&gt;&amp;gt; As always with this sort of stuff, we need to carefully benchmark to insure we don't spend more time doing the optimization than it actually saves.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Commented%3A-%28JAXEN-88%29-Early-termination-with-positional-predicates-tp26131192p26131192.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26130313</id>
	<title>[jira] Commented: (JAXEN-88) Early termination with positional predicates</title>
	<published>2009-10-30T06:41:26Z</published>
	<updated>2009-10-30T06:41:26Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-88?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=196655#action_196655&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-88?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=196655#action_196655&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Aleksander Adamowski commented on JAXEN-88:
&lt;br&gt;-------------------------------------------
&lt;br&gt;&lt;br&gt;Hasn't JAXEN-31 addressed this?
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Early termination with positional predicates
&lt;br&gt;&amp;gt; --------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-88
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-88&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-88&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: core
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Elliotte Rusty Harold
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 2.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Michael Kay describes a Saxon optimization in this article on developerWorks:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://www-106.ibm.com/developerworks/library/x-xslt2/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www-106.ibm.com/developerworks/library/x-xslt2/&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;quot;A predicate such as para[position() &amp;lt;= 3] selects the first three &amp;lt;para&amp;gt; children of the current node. It is not necessary to apply this predicate explicitly to every &amp;lt;para&amp;gt; element to see if it is true, since processing can stop after the third node.&amp;quot;
&lt;br&gt;&amp;gt; As always with this sort of stuff, we need to carefully benchmark to insure we don't spend more time doing the optimization than it actually saves.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Commented%3A-%28JAXEN-88%29-Early-termination-with-positional-predicates-tp26130313p26130313.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26065862</id>
	<title>[jira] Updated: (JAXEN-149) Upgrade to Maven 2</title>
	<published>2009-10-26T12:22:27Z</published>
	<updated>2009-10-26T12:22:27Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-149?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-149?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Brian Ewins updated JAXEN-149:
&lt;br&gt;------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: 0001-maven-2-build-support.patch
&lt;br&gt;&lt;br&gt;Some things were still not working correctly, as all the xdoc and resources needed to be moved to work with the new site plugin; also the old navigation.xml doesn't work any more, so I crafted a new site.xml. This patch can't be applied with svn - it will apply to the master branch of the git repo attached in jaxen-31. (I don't know how to get git to produce svn-compatible patches when there's binary stuff involved - in this case the jaxen logo moved). Stylistically, this appears to be pretty much what we have on the website, except the legend is gone from the bottom of the left hand menu - there doesn't seem to be a way to get that any more.
&lt;br&gt;&lt;br&gt;Also, the checkstyle report had 14000+ errors in it, which wasn't believable. I've added a checkstyle.xml which I believe covers what we used to do in the project.properties, but it still reports 4000+ errors - checkstyle has gained a lot of checks since the version we used.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Upgrade to Maven 2
&lt;br&gt;&amp;gt; ------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-149
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-149&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-149&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Task
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Build
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Elliotte Rusty Harold
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 1.1.3
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: 0001-maven-2-build-support.patch, jaxen-maven2-upgrade.patch, mvn.patch, pom.xml
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; One of these days we should move forward to Maven 2, but not for Jaxen 1.1. 
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-149%29-Upgrade-to-Maven-2-tp5150339p26065862.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26061240</id>
	<title>[jira] Updated: (JAXEN-149) Upgrade to Maven 2</title>
	<published>2009-10-26T07:53:26Z</published>
	<updated>2009-10-26T07:53:26Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-149?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-149?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Brian Ewins updated JAXEN-149:
&lt;br&gt;------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: mvn.patch
&lt;br&gt;&lt;br&gt;Attached an updated version of the patch for testing. The previous version wasn't quite correct:
&lt;br&gt;* the jdom, dom4j, xom dependencies should be optional (see JAXEN-138)
&lt;br&gt;* the xmlapis/xerces dependencies should be 'provided' (later JREs have these, don't need to impose old xerces version)
&lt;br&gt;* 'mvn site' didn't work due to missing/misconfigured plugins
&lt;br&gt;* the linkcheck plugin doesn't exist in m2. (Unfortunately - running it from maven 1 shows we have a bunch of broken links)
&lt;br&gt;* the issue reporting system needs specified - its JIRA (otherwise reports fail looking for TRAC)
&lt;br&gt;* the changes plugin needs a commons-codec dependency. At least, on one of my machines it did. This is apparently intermittently reported for that plugin and always ends up being fixed by adding an external dependency.
&lt;br&gt;* added the assembly plugin, and src-assembly.xml, to simulate the additional artifacts our old maven.xml was creating for 'maven dist'. I /presume/ these are the things we offered for download from sourceforge - is this still necessary? Use &amp;quot;mvn assembly:assembly&amp;quot; to generate these artifacts (XXX-bin.tar.gz, XXX-bin.zip, XXX-src.tar.gz, and XXX-src.zip)
&lt;br&gt;* fixed a bug that the assembly plugin creates archives containing the full path to your files by depending on an explicit version of this plugin.
&lt;br&gt;* javadoc plugin was misconfigured, leading to unrecognized '@todo' (the tags configuration block needs to be in the reporting section)
&lt;br&gt;* source file encoding needs specified to suppress a lot of warning messages in report generation.
&lt;br&gt;&lt;br&gt;Building like this was surprisingly flaky. I tried with IDEA 8.1 (win32), mvn directly (win32, OS X), and Eclipse Ganymede (OS X). Each environment complained slightly differently about missing dependencies. 
&lt;br&gt;&lt;br&gt;Hence, I don't think this is ready to land just yet, but worth trying out.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Upgrade to Maven 2
&lt;br&gt;&amp;gt; ------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-149
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-149&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-149&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Task
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Build
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Elliotte Rusty Harold
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 1.1.3
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: jaxen-maven2-upgrade.patch, mvn.patch, pom.xml
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; One of these days we should move forward to Maven 2, but not for Jaxen 1.1. 
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-149%29-Upgrade-to-Maven-2-tp5150339p26061240.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26043469</id>
	<title>Re: Fwd: Jaxen performance test results</title>
	<published>2009-10-24T15:00:00Z</published>
	<updated>2009-10-24T15:00:00Z</updated>
	<author>
		<name>Elliotte Rusty Harold-2</name>
	</author>
	<content type="html">On Wed, Oct 21, 2009 at 9:52 AM, Baz &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26043469&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;brian.ewins@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; ^ since this code iterates over all returned nodes, it forces full
&lt;br&gt;&amp;gt; evaluation of the nodeset, ie it will always be as slow as possible.
&lt;br&gt;&amp;gt; The benchmark doesn't force full evaluation, so will penalize this
&lt;br&gt;&amp;gt; implementation versus the various JAXP engines tested. It doesn't
&lt;br&gt;&amp;gt; include tests like 'boolean(/x/y/z/)'  - which would be fast - since
&lt;br&gt;&amp;gt; the Node.query() api doesn't support that kind of xpath.
&lt;br&gt;&lt;br&gt;In CVS I have eliminated the iteration you noted in XOM. However I did
&lt;br&gt;this by combining it with another iteration in JaxenConnector you
&lt;br&gt;didn't notice so the effect is likely small at best, and doesn't stop
&lt;br&gt;the loading of the list. However one pass through the list is still
&lt;br&gt;likely better than two.
&lt;br&gt;&lt;br&gt;I'm not sure I can really fix this because XOM needs to update the
&lt;br&gt;list returned to take account of differences between XPath's/Jaxen's
&lt;br&gt;data model and XOM's.
&lt;br&gt;&lt;br&gt;Practically I suspect the real performance win for XOM would be
&lt;br&gt;caching the compiled XPath expressions.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Elliotte Rusty Harold
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26043469&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;elharo@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Fwd%3A-Jaxen-performance-test-results-tp25992970p26043469.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26034244</id>
	<title>[jira] Commented: (JAXEN-31) if jaxen stopped using lists it would be 37x faster</title>
	<published>2009-10-23T15:41:27Z</published>
	<updated>2009-10-23T15:41:27Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=195774#action_195774&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=195774#action_195774&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Aleksander Adamowski commented on JAXEN-31:
&lt;br&gt;-------------------------------------------
&lt;br&gt;&lt;br&gt;BTW, I've already started to adapt jBPM-BPEL to take advantage of Jaxen LazyLists:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;https://jira.jboss.org/jira/browse/BPEL-313&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://jira.jboss.org/jira/browse/BPEL-313&lt;/a&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; if jaxen stopped using lists it would be 37x faster
&lt;br&gt;&amp;gt; ---------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-31
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Brian Ewins
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 2.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: Brian_Ewins_JAXEN-31_perf.patch, jaxen.zip, perf.patch, perf.patch, perf.patch, stuff.tgz
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; Original Estimate: 1 week
&lt;br&gt;&amp;gt; &amp;nbsp;Remaining Estimate: 1 week
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The short story - I've rewritten jaxen to use a nodeset abstraction instead of a list to accumulate results. With the unit tests at nearly 100%, the performance test on dom4j runs in ~200ms on my 1GHz powerbook, compared to ~7400ms for the nightly jaxen build. The failing unit tests are for paths not covered in the performance test.
&lt;br&gt;&amp;gt; The long story - I wrote an implementation of the draft ISO Schematron spec on top of Jaxen, instead of the more usual XSLT. The schematron spec is designed so this can be done, mainly for performance reasons. Once I had enough working I was able to compare jaxen with xalan on the 'screamatron' torture test, which is using schematron to validate the schematron 1.5 spec. I was suprised to find that jaxen was about 2x /slower/ than xalan, and marginally slower with a jdom navigator than a dom4j navigator. Looking at why it was so slow, it became clear that the problem was that throughout jaxen it's building lists of intermediate results to filter down, instead of generating the 'next' result on demand. There's comments about this in several places in the code, but the list thing is so ingrained it needs more than a little refactoring to fix. 
&lt;br&gt;&amp;gt; I decided to have a go. This change produces apis incompatible with previous versions of jaxen, so this will be a lump of code not a wee patch. I've basically cloned jaxen to 'org.jaxen2' to work on it. I'm nearly done with the changes, failing tests for the non-xpath extension functions which I havent implemented yet, patterns (not touched at all yet), and a couple of minor bugs.
&lt;br&gt;&amp;gt; I'll post the code on jira once I'm done, but here's the gist of the changes I made:
&lt;br&gt;&amp;gt; - Introduce a Nodeset abstraction instead of a list...
&lt;br&gt;&amp;gt; public interface extends Iterator {
&lt;br&gt;&amp;gt; Object current();
&lt;br&gt;&amp;gt; int position();
&lt;br&gt;&amp;gt; // use of last() replaces the internal iterator with an iterator over a list caching results.
&lt;br&gt;&amp;gt; // it's basically a fallback on what jaxen used to do.
&lt;br&gt;&amp;gt; int last();
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; the reason for this is obvious, eg you can just test 'hasNext()' to check the boolean value of a nodeset.
&lt;br&gt;&amp;gt; - change the signature of Expr to allow the selection of a fast code path
&lt;br&gt;&amp;gt; public interface Expr {
&lt;br&gt;&amp;gt; // these require context because of variable/function refs only. see later.
&lt;br&gt;&amp;gt; boolean isBoolean(Context ctx);
&lt;br&gt;&amp;gt; boolean isNumber(Context ctx);
&lt;br&gt;&amp;gt; boolean isString(Context ctx);
&lt;br&gt;&amp;gt; boolean isNodeset(Context ctx);
&lt;br&gt;&amp;gt; boolean booleanValue(Context ctx);
&lt;br&gt;&amp;gt; double numberValue(Context ctx);
&lt;br&gt;&amp;gt; String stringValue(Context ctx);
&lt;br&gt;&amp;gt; Nodeset nodesetValue(Context ctx);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this is really for my own sanity as there's so much code to maintain. Throughout jaxen, everything is untyped, so its fairly easy to (eg) pass a nodeSet when you meant to pass a node; there's instanceof checks, == null checks, and casts everywhere to deal with this. &amp;nbsp;Once you put everything behind an interface like the one above, making objects responsible for their own casts, a lot of the code is simplified, eg addition is just expr1.numberValue(ctx) + expr2.numberValue(ctx). All but a couple of classes inherit from abstract base classes that implement all but one of those methods (eg StringExprBase leaves stringValue() abstract.) &amp;nbsp;
&lt;br&gt;&amp;gt; Variable/Function refs don't have a type without context in my version, &amp;nbsp;and like Jaxen I look up functions, variables every time. This isn't smart - in xpath we can resolve all variable, function refs beforehand, and get faster code as a result. I'll probably change things so I have 'bound' and 'unbound' exprs, add 'BoundExpr bind(VariableContext,FunctionContext)'. I'll still need to pass these as members of Context to support the 'evaluate' extension function though.
&lt;br&gt;&amp;gt; Another approach to the same concern that I didn't try is to pass in a typed context, eg 'StringContext', 'NodesetContext', etc (think of this as allowing things like perl's 'wantarray()'. That approach would make it easier to expand the number of supported types (eg for xpath2) in future, I'll try it once the tests pass.
&lt;br&gt;&amp;gt; - moved all the functions to a single utility class
&lt;br&gt;&amp;gt; public class Functions {
&lt;br&gt;&amp;gt; String substring(String s, double start, double end);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this makes it easier to unit test the xpath functions, since they are mostly context-independent. Functions that need a navigator get it passed as the first arg, functions that optionally use the context node instead of an argument have that function added as a method of Context. Incidentally I changed some of the unit tests to get mine to pass - in particular I changed the substring() tests back to match the spec (they don't currently).
&lt;br&gt;&amp;gt; No function in my version returns null. (compare to eg the name, namespaceuri functions of Navigator). The xpath spec uses &amp;quot;&amp;quot; or an empty nodeset throughout, so do I, this gets rid of a lot of == null checks. 
&lt;br&gt;&amp;gt; Some of the bugs against the current version of jaxen are fixed by this code - eg the use of double throughout allows gt/lt comparisons of longs (bug jaxen-28), + both of the bugs I filed previously.
&lt;br&gt;&amp;gt; I'd estimate I can finish this in the next week.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Commented%3A-%28JAXEN-31%29-if-jaxen-stopped-using-lists-it-would-be-37x-faster-tp26034244p26034244.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26014948</id>
	<title>[jira] Resolved: (JAXEN-205) Accidental subtree copy on the SVN trunk?</title>
	<published>2009-10-22T11:27:27Z</published>
	<updated>2009-10-22T11:27:27Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-205?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-205?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Elliotte Rusty Harold resolved JAXEN-205.
&lt;br&gt;-----------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Resolution: Fixed
&lt;br&gt;&amp;nbsp; &amp;nbsp; Fix Version/s: 1.1.3
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Elliotte Rusty Harold
&lt;br&gt;&lt;br&gt;I believe I have fixed this now.
&lt;br&gt;&lt;br&gt;FYI, I used SVN from a computer where I have not installed my ssh keys using just my username and password, so foliks who think they're locked out may want to try again if they still remember their CVS credentials. 
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Accidental subtree copy on the SVN trunk?
&lt;br&gt;&amp;gt; -----------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-205
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-205&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-205&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Task
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Build
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Aleksander Adamowski
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Elliotte Rusty Harold
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 1.1.3
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; In the SVN repository, one can see that the Jaxen sources are duplicated inside themselves on the trunk:
&lt;br&gt;&amp;gt; &lt;a href=&quot;https://svn.codehaus.org/jaxen/trunk/jaxen/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://svn.codehaus.org/jaxen/trunk/jaxen/&lt;/a&gt;&lt;br&gt;&amp;gt; &lt;a href=&quot;https://svn.codehaus.org/jaxen/trunk/jaxen/jaxen/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://svn.codehaus.org/jaxen/trunk/jaxen/jaxen/&lt;/a&gt;&lt;br&gt;&amp;gt; This doesn't look like an intentional SVN branch and doesn't seem to make any sense.
&lt;br&gt;&amp;gt; If they are indeed accidental, I suggest deleting them as they make diffs between tags/branches and the trunk very cumbersome (not to speak about GIT repositories of other developers).
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-205%29-Accidental-subtree-copy-on-the-SVN-trunk--tp25906638p26014948.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26008618</id>
	<title>Re: Fwd: Jaxen performance test results</title>
	<published>2009-10-22T04:52:17Z</published>
	<updated>2009-10-22T04:52:17Z</updated>
	<author>
		<name>Elliotte Rusty Harold-2</name>
	</author>
	<content type="html">On Wed, Oct 21, 2009 at 9:52 AM, Baz &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26008618&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;brian.ewins@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Internally the benchmark uses xom's Node.query() to get back a list of
&lt;br&gt;&amp;gt; nodes, rather than calling jaxen directly (the code is here:
&lt;br&gt;&amp;gt; &lt;a href=&quot;https://bosshog.lbl.gov/repos/java-u3/tags/v1_1/nux/src/nux/xom/tests/XQueryBenchmark.java&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://bosshog.lbl.gov/repos/java-u3/tags/v1_1/nux/src/nux/xom/tests/XQueryBenchmark.java&lt;/a&gt;&lt;br&gt;&amp;gt; ). So I took a look at what Node does, excerpting the relevant bits:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;            JaxenConnector connector = new JaxenConnector(xpath);
&lt;br&gt;&amp;gt;            // ...
&lt;br&gt;&amp;gt;            List queryResults = connector.selectNodes(this);
&lt;br&gt;&amp;gt;            Iterator iterator = queryResults.iterator();
&lt;br&gt;&amp;gt;            while (iterator.hasNext()) {
&lt;br&gt;&amp;gt;                Object o = iterator.next()
&lt;br&gt;&amp;gt;                // ...
&lt;/div&gt;&lt;br&gt;&lt;br&gt;Actually the relevant bit may be even higher up the call chain. This
&lt;br&gt;has already happened by the time you get to the code you noticed:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; public List selectNodes(Object expression) throws JaxenException {
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; List result = super.selectNodes(expression);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Text objects are returned wrapped in a List.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // We need to unwrap them here.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ListIterator iterator = result.listIterator();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (iterator.hasNext()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Object next = iterator.next();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (next instanceof List) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; List list = (List) next;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // replace the list with the first item in the list
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; iterator.set(list.get(0));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // insert any subsequent Text objects into the list
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (list.size() &amp;gt; 1) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Iterator texts = list.listIterator(1);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (texts.hasNext()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; iterator.add(texts.next());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return result;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&lt;br&gt;So I'm iterating through the list twice. If nothing else, I suspect I
&lt;br&gt;can get that down to a single iteration. However I'm not sure I can
&lt;br&gt;eliminate the iteration completely.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Elliotte Rusty Harold
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26008618&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;elharo@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Fwd%3A-Jaxen-performance-test-results-tp25992970p26008618.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26008567</id>
	<title>Re: Fwd: Jaxen performance test results</title>
	<published>2009-10-22T04:48:25Z</published>
	<updated>2009-10-22T04:48:25Z</updated>
	<author>
		<name>Elliotte Rusty Harold-2</name>
	</author>
	<content type="html">On Wed, Oct 21, 2009 at 9:52 AM, Baz &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26008567&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;brian.ewins@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Internally the benchmark uses xom's Node.query() to get back a list of
&lt;br&gt;&amp;gt; nodes, rather than calling jaxen directly (the code is here:
&lt;br&gt;&amp;gt; &lt;a href=&quot;https://bosshog.lbl.gov/repos/java-u3/tags/v1_1/nux/src/nux/xom/tests/XQueryBenchmark.java&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://bosshog.lbl.gov/repos/java-u3/tags/v1_1/nux/src/nux/xom/tests/XQueryBenchmark.java&lt;/a&gt;&lt;br&gt;&amp;gt; ). So I took a look at what Node does, excerpting the relevant bits:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;            JaxenConnector connector = new JaxenConnector(xpath);
&lt;br&gt;&amp;gt;            // ...
&lt;br&gt;&amp;gt;            List queryResults = connector.selectNodes(this);
&lt;br&gt;&amp;gt;            Iterator iterator = queryResults.iterator();
&lt;br&gt;&amp;gt;            while (iterator.hasNext()) {
&lt;br&gt;&amp;gt;                Object o = iterator.next()
&lt;br&gt;&amp;gt;                // ...
&lt;br&gt;&amp;gt;            }
&lt;/div&gt;&lt;br&gt;&lt;br&gt;There might be some things I can do to optimize that path and avoid
&lt;br&gt;early loading, but nothing too easy or obvious. For jaxen's own
&lt;br&gt;purposes I would suggest a benchmark based purely on DOM.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Elliotte Rusty Harold
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26008567&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;elharo@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Fwd%3A-Jaxen-performance-test-results-tp25992970p26008567.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26008348</id>
	<title>[jira] Commented: (JAXEN-206) bad order when context is a list of nodes at different depths</title>
	<published>2009-10-22T04:30:26Z</published>
	<updated>2009-10-22T04:30:26Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-206?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=195562#action_195562&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-206?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=195562#action_195562&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Elliotte Rusty Harold commented on JAXEN-206:
&lt;br&gt;---------------------------------------------
&lt;br&gt;&lt;br&gt;I've committed this patch and verified that I still have SVN access. Please verify that everything seems fine, and then close this bug. Thanks. 
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; bad order when context is a list of nodes at different depths
&lt;br&gt;&amp;gt; -------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-206
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-206&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-206&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: core
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.1.3
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Brian Ewins
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: mismatch.patch
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; As described by Elliotte on the list:
&lt;br&gt;&amp;gt; Consider this:
&lt;br&gt;&amp;gt; &amp;lt;z&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;a&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;b/&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;/a&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;c/&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;/z&amp;gt;
&lt;br&gt;&amp;gt; Suppose the list includes b and c in document order. c's parent
&lt;br&gt;&amp;gt; precedes b's parent even though b precedes c
&lt;br&gt;&amp;gt; When calling xpath.selectNodes(context) we can supply a list of nodes instead of a single node. By supplying a list containing b and c as described above, and selecting &amp;quot;parent::*&amp;quot;, we should get the list [z, a] returned. Instead we get [a, z]. The reason is that DefaultLocationPath does not sort the nodes into document order when there is only a single step in the location path.
&lt;br&gt;&amp;gt; Patch attached, including test case.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-206%29-bad-order-when-context-is-a-list-of-nodes-at-different-depths-tp25990751p26008348.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25992970</id>
	<title>Fwd: Jaxen performance test results</title>
	<published>2009-10-21T06:52:15Z</published>
	<updated>2009-10-21T06:52:15Z</updated>
	<author>
		<name>Baz-4</name>
	</author>
	<content type="html">Hoping these attachments make it through... Aleksander sent me these
&lt;br&gt;benchmarks made using the nux XQueryBenchmark script. The jaxen-31
&lt;br&gt;lazy-loading came out consistently worse, even on paths where it
&lt;br&gt;should have performed better. For some paths this is expected due to
&lt;br&gt;the additional overhead, but it shouldn't have been worse for all so I
&lt;br&gt;took a look.
&lt;br&gt;&lt;br&gt;Internally the benchmark uses xom's Node.query() to get back a list of
&lt;br&gt;nodes, rather than calling jaxen directly (the code is here:
&lt;br&gt;&lt;a href=&quot;https://bosshog.lbl.gov/repos/java-u3/tags/v1_1/nux/src/nux/xom/tests/XQueryBenchmark.java&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://bosshog.lbl.gov/repos/java-u3/tags/v1_1/nux/src/nux/xom/tests/XQueryBenchmark.java&lt;/a&gt;&lt;br&gt;). So I took a look at what Node does, excerpting the relevant bits:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; JaxenConnector connector = new JaxenConnector(xpath);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // ...
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; List queryResults = connector.selectNodes(this);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Iterator iterator = queryResults.iterator();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (iterator.hasNext()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Object o = iterator.next()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // ...
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;^ since this code iterates over all returned nodes, it forces full
&lt;br&gt;evaluation of the nodeset, ie it will always be as slow as possible.
&lt;br&gt;The benchmark doesn't force full evaluation, so will penalize this
&lt;br&gt;implementation versus the various JAXP engines tested. It doesn't
&lt;br&gt;include tests like 'boolean(/x/y/z/)' &amp;nbsp;- which would be fast - since
&lt;br&gt;the Node.query() api doesn't support that kind of xpath.
&lt;br&gt;&lt;br&gt;-Baz
&lt;br&gt;&lt;br&gt;---------- Forwarded message ----------
&lt;br&gt;From: Aleksander Adamowski &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25992970&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aleksander.adamowski@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: 2009/10/21
&lt;br&gt;Subject: Jaxen performance test results
&lt;br&gt;To: Brian Ewins &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25992970&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Brian.Ewins@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;Aleksander Adamowski
&lt;br&gt; &lt;a href=&quot;http://olo.org.pl&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://olo.org.pl&lt;/a&gt;&lt;br&gt;&lt;br /&gt;$ ./nux-xpath_benchmark.sh 1.1.2
&lt;br&gt;Jaxen version: 1.1.2
&lt;br&gt;Classpath:
&lt;br&gt;lib/nux.jar;lib/saxon8.jar;../..//xom-1.2.3_jaxen-1.1.2.jar
&lt;br&gt;Environment: java 1.6.0_07, Java HotSpot(TM) Server VM, Sun Microsystems Inc., Windows XP, 5.1, x86
&lt;br&gt;Now running java nux.xom.tests.XQueryBenchmark 1000 3 xom samples/data/romeo.xml samples/xpath/queries1.xml 
&lt;br&gt;Now reading samples/data/romeo.xml ms=250
&lt;br&gt;Now reading samples/xpath/queries1.xml ms=15
&lt;br&gt;query = following-sibling::* &amp;nbsp; ms=156, queries/sec=6410.2563
&lt;br&gt;query = preceding-sibling::* &amp;nbsp; ms=63, queries/sec=15873.016
&lt;br&gt;query = ancestor-or-self::* &amp;nbsp; ms=31, queries/sec=32258.064
&lt;br&gt;query = descendant::* &amp;nbsp; ms=31, queries/sec=32258.064
&lt;br&gt;query = //* &amp;nbsp; ms=23250, queries/sec=43.010754
&lt;br&gt;query = //line | //speaker &amp;nbsp; ms=13453, queries/sec=74.33286
&lt;br&gt;query = 'Hello World!' &amp;nbsp;****** XOM can't handle this query: XPath expression 'Hello World!' did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = count(//line) &amp;nbsp;****** XOM can't handle this query: XPath expression count(//line) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=16, queries/sec=62499.996
&lt;br&gt;query = //line &amp;nbsp; ms=5750, queries/sec=173.91304
&lt;br&gt;query = 1+1 &amp;nbsp;****** XOM can't handle this query: XPath expression 1+1 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //speech[speaker = 'Rom.'] &amp;nbsp; ms=5484, queries/sec=182.34865
&lt;br&gt;query = //speech[speaker = 'Jul.'] &amp;nbsp; ms=5469, queries/sec=182.84879
&lt;br&gt;query = //line[ancestor::act[@id='5']/scene[@id='3']] &amp;nbsp; ms=8875, queries/sec=112.676056
&lt;br&gt;query = true() and true() and true() and true() and true() &amp;nbsp;****** XOM can't handle this query: XPath expression true() and true() and true() and true() and true() did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=16, queries/sec=62499.996
&lt;br&gt;query = //*[@id] &amp;nbsp; ms=6797, queries/sec=147.12373
&lt;br&gt;query = (count(descendant::*) + count(ancestor::*) + count(following::*) + count(preceding::*)) &amp;gt;= 5034 &amp;nbsp;****** XOM can't handle this query: XPath expression (count(descendant::*) + count(ancestor::*) + count(following::*) + count(preceding::*)) &amp;gt;= 5034 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=16, queries/sec=62499.996
&lt;br&gt;query = contains('1234567890','9') &amp;nbsp;****** XOM can't handle this query: XPath expression contains('1234567890','9') did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //processing-instruction() &amp;nbsp; ms=6609, queries/sec=151.30882
&lt;br&gt;query = following-sibling::* &amp;nbsp; ms=16, queries/sec=62499.996
&lt;br&gt;query = name(node()) &amp;nbsp;****** XOM can't handle this query: XPath expression name(node()) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = sum(//act/@id) &amp;nbsp;****** XOM can't handle this query: XPath expression sum(//act/@id) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=15, queries/sec=66666.67
&lt;br&gt;query = /guttext/play/playbody/act[@id='5']/scene[@id='3']/speech &amp;nbsp; ms=78, queries/sec=12820.513
&lt;br&gt;query = normalize-space(string(distinct-values(/guttext/markupmeta/gutdate))) &amp;nbsp;****** XOM can't handle this query: XPath error: No Such Function distinct-values
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', -42, 1.0e0 div 0) &amp;nbsp;****** XOM can't handle this query: XPath error: Expected: )
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', 0, 3) &amp;nbsp;****** XOM can't handle this query: XPath expression substring('12345', 0, 3) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', 1.5, 2.6) &amp;nbsp;****** XOM can't handle this query: XPath expression substring('12345', 1.5, 2.6) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = -5 mod -2 &amp;nbsp;****** XOM can't handle this query: XPath expression -5 mod -2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = -5 mod 2 &amp;nbsp;****** XOM can't handle this query: XPath expression -5 mod 2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = 5 mod -2 &amp;nbsp;****** XOM can't handle this query: XPath expression 5 mod -2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = 5 mod 2 &amp;nbsp;****** XOM can't handle this query: XPath expression 5 mod 2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = normalize-space( ' &amp;nbsp;qwerty ' ) &amp;nbsp;****** XOM can't handle this query: XPath expression normalize-space( ' &amp;nbsp;qwerty ' ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = ceiling( 3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression ceiling( 3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = floor( 3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression floor( 3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = ceiling( -3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression ceiling( -3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = floor( -3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression floor( -3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = /guttext/play/playbody/act &amp;nbsp; ms=94, queries/sec=10638.298
&lt;br&gt;done with repetition 0
&lt;br&gt;&lt;br&gt;&lt;br&gt;Now reading samples/xpath/queries1.xml ms=0
&lt;br&gt;query = following-sibling::* &amp;nbsp; ms=47, queries/sec=21276.596
&lt;br&gt;query = preceding-sibling::* &amp;nbsp; ms=15, queries/sec=66666.67
&lt;br&gt;query = ancestor-or-self::* &amp;nbsp; ms=16, queries/sec=62499.996
&lt;br&gt;query = descendant::* &amp;nbsp; ms=15, queries/sec=66666.67
&lt;br&gt;query = //* &amp;nbsp; ms=22641, queries/sec=44.16766
&lt;br&gt;query = //line | //speaker &amp;nbsp; ms=13187, queries/sec=75.83226
&lt;br&gt;query = 'Hello World!' &amp;nbsp;****** XOM can't handle this query: XPath expression 'Hello World!' did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = count(//line) &amp;nbsp;****** XOM can't handle this query: XPath expression count(//line) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=16, queries/sec=62499.996
&lt;br&gt;query = //line &amp;nbsp; ms=5640, queries/sec=177.30496
&lt;br&gt;query = 1+1 &amp;nbsp;****** XOM can't handle this query: XPath expression 1+1 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //speech[speaker = 'Rom.'] &amp;nbsp; ms=5297, queries/sec=188.7861
&lt;br&gt;query = //speech[speaker = 'Jul.'] &amp;nbsp; ms=5282, queries/sec=189.32222
&lt;br&gt;query = //line[ancestor::act[@id='5']/scene[@id='3']] &amp;nbsp; ms=8593, queries/sec=116.37379
&lt;br&gt;query = true() and true() and true() and true() and true() &amp;nbsp;****** XOM can't handle this query: XPath expression true() and true() and true() and true() and true() did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //*[@id] &amp;nbsp; ms=6672, queries/sec=149.8801
&lt;br&gt;query = (count(descendant::*) + count(ancestor::*) + count(following::*) + count(preceding::*)) &amp;gt;= 5034 &amp;nbsp;****** XOM can't handle this query: XPath expression (count(descendant::*) + count(ancestor::*) + count(following::*) + count(preceding::*)) &amp;gt;= 5034 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=16, queries/sec=62499.996
&lt;br&gt;query = contains('1234567890','9') &amp;nbsp;****** XOM can't handle this query: XPath expression contains('1234567890','9') did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //processing-instruction() &amp;nbsp; ms=6484, queries/sec=154.22578
&lt;br&gt;query = following-sibling::* &amp;nbsp; ms=16, queries/sec=62499.996
&lt;br&gt;query = name(node()) &amp;nbsp;****** XOM can't handle this query: XPath expression name(node()) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = sum(//act/@id) &amp;nbsp;****** XOM can't handle this query: XPath expression sum(//act/@id) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = /guttext/play/playbody/act[@id='5']/scene[@id='3']/speech &amp;nbsp; ms=78, queries/sec=12820.513
&lt;br&gt;query = normalize-space(string(distinct-values(/guttext/markupmeta/gutdate))) &amp;nbsp;****** XOM can't handle this query: XPath error: No Such Function distinct-values
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', -42, 1.0e0 div 0) &amp;nbsp;****** XOM can't handle this query: XPath error: Expected: )
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', 0, 3) &amp;nbsp;****** XOM can't handle this query: XPath expression substring('12345', 0, 3) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', 1.5, 2.6) &amp;nbsp;****** XOM can't handle this query: XPath expression substring('12345', 1.5, 2.6) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = -5 mod -2 &amp;nbsp;****** XOM can't handle this query: XPath expression -5 mod -2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = -5 mod 2 &amp;nbsp;****** XOM can't handle this query: XPath expression -5 mod 2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = 5 mod -2 &amp;nbsp;****** XOM can't handle this query: XPath expression 5 mod -2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = 5 mod 2 &amp;nbsp;****** XOM can't handle this query: XPath expression 5 mod 2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = normalize-space( ' &amp;nbsp;qwerty ' ) &amp;nbsp;****** XOM can't handle this query: XPath expression normalize-space( ' &amp;nbsp;qwerty ' ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = ceiling( 3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression ceiling( 3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = floor( 3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression floor( 3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = ceiling( -3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression ceiling( -3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = floor( -3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression floor( -3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = /guttext/play/playbody/act &amp;nbsp; ms=15, queries/sec=66666.67
&lt;br&gt;done with repetition 1
&lt;br&gt;&lt;br&gt;&lt;br&gt;Now reading samples/xpath/queries1.xml ms=0
&lt;br&gt;query = following-sibling::* &amp;nbsp; ms=31, queries/sec=32258.064
&lt;br&gt;query = preceding-sibling::* &amp;nbsp; ms=0, queries/sec=Infinity
&lt;br&gt;query = ancestor-or-self::* &amp;nbsp; ms=16, queries/sec=62499.996
&lt;br&gt;query = descendant::* &amp;nbsp; ms=16, queries/sec=62499.996
&lt;br&gt;query = //* &amp;nbsp; ms=22656, queries/sec=44.138416
&lt;br&gt;query = //line | //speaker &amp;nbsp; ms=13312, queries/sec=75.12019
&lt;br&gt;query = 'Hello World!' &amp;nbsp;****** XOM can't handle this query: XPath expression 'Hello World!' did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = count(//line) &amp;nbsp;****** XOM can't handle this query: XPath expression count(//line) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //line &amp;nbsp; ms=5704, queries/sec=175.31557
&lt;br&gt;query = 1+1 &amp;nbsp;****** XOM can't handle this query: XPath expression 1+1 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //speech[speaker = 'Rom.'] &amp;nbsp; ms=5343, queries/sec=187.16077
&lt;br&gt;query = //speech[speaker = 'Jul.'] &amp;nbsp; ms=5313, queries/sec=188.21758
&lt;br&gt;query = //line[ancestor::act[@id='5']/scene[@id='3']] &amp;nbsp; ms=8700, queries/sec=114.94253
&lt;br&gt;query = true() and true() and true() and true() and true() &amp;nbsp;****** XOM can't handle this query: XPath expression true() and true() and true() and true() and true() did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //*[@id] &amp;nbsp; ms=6656, queries/sec=150.24039
&lt;br&gt;query = (count(descendant::*) + count(ancestor::*) + count(following::*) + count(preceding::*)) &amp;gt;= 5034 &amp;nbsp;****** XOM can't handle this query: XPath expression (count(descendant::*) + count(ancestor::*) + count(following::*) + count(preceding::*)) &amp;gt;= 5034 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = contains('1234567890','9') &amp;nbsp;****** XOM can't handle this query: XPath expression contains('1234567890','9') did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //processing-instruction() &amp;nbsp; ms=6500, queries/sec=153.84616
&lt;br&gt;query = following-sibling::* &amp;nbsp; ms=0, queries/sec=Infinity
&lt;br&gt;query = name(node()) &amp;nbsp;****** XOM can't handle this query: XPath expression name(node()) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = sum(//act/@id) &amp;nbsp;****** XOM can't handle this query: XPath expression sum(//act/@id) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=16, queries/sec=62499.996
&lt;br&gt;query = /guttext/play/playbody/act[@id='5']/scene[@id='3']/speech &amp;nbsp; ms=31, queries/sec=32258.064
&lt;br&gt;query = normalize-space(string(distinct-values(/guttext/markupmeta/gutdate))) &amp;nbsp;****** XOM can't handle this query: XPath error: No Such Function distinct-values
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', -42, 1.0e0 div 0) &amp;nbsp;****** XOM can't handle this query: XPath error: Expected: )
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', 0, 3) &amp;nbsp;****** XOM can't handle this query: XPath expression substring('12345', 0, 3) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', 1.5, 2.6) &amp;nbsp;****** XOM can't handle this query: XPath expression substring('12345', 1.5, 2.6) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = -5 mod -2 &amp;nbsp;****** XOM can't handle this query: XPath expression -5 mod -2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = -5 mod 2 &amp;nbsp;****** XOM can't handle this query: XPath expression -5 mod 2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = 5 mod -2 &amp;nbsp;****** XOM can't handle this query: XPath expression 5 mod -2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = 5 mod 2 &amp;nbsp;****** XOM can't handle this query: XPath expression 5 mod 2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = normalize-space( ' &amp;nbsp;qwerty ' ) &amp;nbsp;****** XOM can't handle this query: XPath expression normalize-space( ' &amp;nbsp;qwerty ' ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = ceiling( 3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression ceiling( 3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = floor( 3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression floor( 3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = ceiling( -3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression ceiling( -3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = floor( -3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression floor( -3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = /guttext/play/playbody/act &amp;nbsp; ms=0, queries/sec=Infinity
&lt;br&gt;done with repetition 2
&lt;br&gt;&lt;br&gt;&lt;br /&gt;$ ./nux-xpath_benchmark.sh 1.1.3
&lt;br&gt;Jaxen version: 1.1.3
&lt;br&gt;Classpath:
&lt;br&gt;lib/nux.jar;lib/saxon8.jar;../..//xom-1.2.3_jaxen-1.1.3.jar
&lt;br&gt;Environment: java 1.6.0_07, Java HotSpot(TM) Server VM, Sun Microsystems Inc., Windows XP, 5.1, x86
&lt;br&gt;Now running java nux.xom.tests.XQueryBenchmark 1000 3 xom samples/data/romeo.xml samples/xpath/queries1.xml 
&lt;br&gt;Now reading samples/data/romeo.xml ms=266
&lt;br&gt;Now reading samples/xpath/queries1.xml ms=15
&lt;br&gt;query = following-sibling::* &amp;nbsp; ms=187, queries/sec=5347.5933
&lt;br&gt;query = preceding-sibling::* &amp;nbsp; ms=47, queries/sec=21276.596
&lt;br&gt;query = ancestor-or-self::* &amp;nbsp; ms=47, queries/sec=21276.596
&lt;br&gt;query = descendant::* &amp;nbsp; ms=31, queries/sec=32258.064
&lt;br&gt;query = //* &amp;nbsp; ms=27594, queries/sec=36.23976
&lt;br&gt;query = //line | //speaker &amp;nbsp; ms=18984, queries/sec=52.67594
&lt;br&gt;query = 'Hello World!' &amp;nbsp;****** XOM can't handle this query: XPath expression 'Hello World!' did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = count(//line) &amp;nbsp;****** XOM can't handle this query: XPath expression count(//line) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //line &amp;nbsp; ms=8687, queries/sec=115.11453
&lt;br&gt;query = 1+1 &amp;nbsp;****** XOM can't handle this query: XPath expression 1+1 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //speech[speaker = 'Rom.'] &amp;nbsp; ms=8328, queries/sec=120.07685
&lt;br&gt;query = //speech[speaker = 'Jul.'] &amp;nbsp; ms=8078, queries/sec=123.793015
&lt;br&gt;query = //line[ancestor::act[@id='5']/scene[@id='3']] &amp;nbsp; ms=17063, queries/sec=58.606342
&lt;br&gt;query = true() and true() and true() and true() and true() &amp;nbsp;****** XOM can't handle this query: XPath expression true() and true() and true() and true() and true() did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=15, queries/sec=66666.67
&lt;br&gt;query = //*[@id] &amp;nbsp; ms=11500, queries/sec=86.95652
&lt;br&gt;query = (count(descendant::*) + count(ancestor::*) + count(following::*) + count(preceding::*)) &amp;gt;= 5034 &amp;nbsp;****** XOM can't handle this query: XPath expression (count(descendant::*) + count(ancestor::*) + count(following::*) + count(preceding::*)) &amp;gt;= 5034 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=16, queries/sec=62499.996
&lt;br&gt;query = contains('1234567890','9') &amp;nbsp;****** XOM can't handle this query: XPath expression contains('1234567890','9') did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //processing-instruction() &amp;nbsp; ms=7891, queries/sec=126.726654
&lt;br&gt;query = following-sibling::* &amp;nbsp; ms=15, queries/sec=66666.67
&lt;br&gt;query = name(node()) &amp;nbsp;****** XOM can't handle this query: XPath expression name(node()) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = sum(//act/@id) &amp;nbsp;****** XOM can't handle this query: XPath expression sum(//act/@id) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=16, queries/sec=62499.996
&lt;br&gt;query = /guttext/play/playbody/act[@id='5']/scene[@id='3']/speech &amp;nbsp; ms=94, queries/sec=10638.298
&lt;br&gt;query = normalize-space(string(distinct-values(/guttext/markupmeta/gutdate))) &amp;nbsp;****** XOM can't handle this query: XPath error: No Such Function distinct-values
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', -42, 1.0e0 div 0) &amp;nbsp;****** XOM can't handle this query: XPath error: Expected: )
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', 0, 3) &amp;nbsp;****** XOM can't handle this query: XPath expression substring('12345', 0, 3) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', 1.5, 2.6) &amp;nbsp;****** XOM can't handle this query: XPath expression substring('12345', 1.5, 2.6) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = -5 mod -2 &amp;nbsp;****** XOM can't handle this query: XPath expression -5 mod -2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = -5 mod 2 &amp;nbsp;****** XOM can't handle this query: XPath expression -5 mod 2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = 5 mod -2 &amp;nbsp;****** XOM can't handle this query: XPath expression 5 mod -2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = 5 mod 2 &amp;nbsp;****** XOM can't handle this query: XPath expression 5 mod 2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = normalize-space( ' &amp;nbsp;qwerty ' ) &amp;nbsp;****** XOM can't handle this query: XPath expression normalize-space( ' &amp;nbsp;qwerty ' ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = ceiling( 3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression ceiling( 3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = floor( 3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression floor( 3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = ceiling( -3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression ceiling( -3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = floor( -3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression floor( -3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = /guttext/play/playbody/act &amp;nbsp; ms=110, queries/sec=9090.909
&lt;br&gt;done with repetition 0
&lt;br&gt;&lt;br&gt;&lt;br&gt;Now reading samples/xpath/queries1.xml ms=0
&lt;br&gt;query = following-sibling::* &amp;nbsp; ms=78, queries/sec=12820.513
&lt;br&gt;query = preceding-sibling::* &amp;nbsp; ms=47, queries/sec=21276.596
&lt;br&gt;query = ancestor-or-self::* &amp;nbsp; ms=15, queries/sec=66666.67
&lt;br&gt;query = descendant::* &amp;nbsp; ms=32, queries/sec=31249.998
&lt;br&gt;query = //* &amp;nbsp; ms=27421, queries/sec=36.4684
&lt;br&gt;query = //line | //speaker &amp;nbsp; ms=19500, queries/sec=51.28205
&lt;br&gt;query = 'Hello World!' &amp;nbsp;****** XOM can't handle this query: XPath expression 'Hello World!' did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = count(//line) &amp;nbsp;****** XOM can't handle this query: XPath expression count(//line) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //line &amp;nbsp; ms=8750, queries/sec=114.28571
&lt;br&gt;query = 1+1 &amp;nbsp;****** XOM can't handle this query: XPath expression 1+1 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //speech[speaker = 'Rom.'] &amp;nbsp; ms=8141, queries/sec=122.83504
&lt;br&gt;query = //speech[speaker = 'Jul.'] &amp;nbsp; ms=8125, queries/sec=123.07692
&lt;br&gt;query = //line[ancestor::act[@id='5']/scene[@id='3']] &amp;nbsp; ms=16938, queries/sec=59.03885
&lt;br&gt;query = true() and true() and true() and true() and true() &amp;nbsp;****** XOM can't handle this query: XPath expression true() and true() and true() and true() and true() did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //*[@id] &amp;nbsp; ms=11484, queries/sec=87.077675
&lt;br&gt;query = (count(descendant::*) + count(ancestor::*) + count(following::*) + count(preceding::*)) &amp;gt;= 5034 &amp;nbsp;****** XOM can't handle this query: XPath expression (count(descendant::*) + count(ancestor::*) + count(following::*) + count(preceding::*)) &amp;gt;= 5034 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = contains('1234567890','9') &amp;nbsp;****** XOM can't handle this query: XPath expression contains('1234567890','9') did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //processing-instruction() &amp;nbsp; ms=7812, queries/sec=128.0082
&lt;br&gt;query = following-sibling::* &amp;nbsp; ms=16, queries/sec=62499.996
&lt;br&gt;query = name(node()) &amp;nbsp;****** XOM can't handle this query: XPath expression name(node()) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = sum(//act/@id) &amp;nbsp;****** XOM can't handle this query: XPath expression sum(//act/@id) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = /guttext/play/playbody/act[@id='5']/scene[@id='3']/speech &amp;nbsp; ms=47, queries/sec=21276.596
&lt;br&gt;query = normalize-space(string(distinct-values(/guttext/markupmeta/gutdate))) &amp;nbsp;****** XOM can't handle this query: XPath error: No Such Function distinct-values
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', -42, 1.0e0 div 0) &amp;nbsp;****** XOM can't handle this query: XPath error: Expected: )
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', 0, 3) &amp;nbsp;****** XOM can't handle this query: XPath expression substring('12345', 0, 3) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', 1.5, 2.6) &amp;nbsp;****** XOM can't handle this query: XPath expression substring('12345', 1.5, 2.6) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = -5 mod -2 &amp;nbsp;****** XOM can't handle this query: XPath expression -5 mod -2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = -5 mod 2 &amp;nbsp;****** XOM can't handle this query: XPath expression -5 mod 2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = 5 mod -2 &amp;nbsp;****** XOM can't handle this query: XPath expression 5 mod -2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = 5 mod 2 &amp;nbsp;****** XOM can't handle this query: XPath expression 5 mod 2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = normalize-space( ' &amp;nbsp;qwerty ' ) &amp;nbsp;****** XOM can't handle this query: XPath expression normalize-space( ' &amp;nbsp;qwerty ' ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = ceiling( 3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression ceiling( 3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = floor( 3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression floor( 3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = ceiling( -3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression ceiling( -3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = floor( -3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression floor( -3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = /guttext/play/playbody/act &amp;nbsp; ms=15, queries/sec=66666.67
&lt;br&gt;done with repetition 1
&lt;br&gt;&lt;br&gt;&lt;br&gt;Now reading samples/xpath/queries1.xml ms=0
&lt;br&gt;query = following-sibling::* &amp;nbsp; ms=63, queries/sec=15873.016
&lt;br&gt;query = preceding-sibling::* &amp;nbsp; ms=15, queries/sec=66666.67
&lt;br&gt;query = ancestor-or-self::* &amp;nbsp; ms=0, queries/sec=Infinity
&lt;br&gt;query = descendant::* &amp;nbsp; ms=0, queries/sec=Infinity
&lt;br&gt;query = //* &amp;nbsp; ms=27453, queries/sec=36.42589
&lt;br&gt;query = //line | //speaker &amp;nbsp; ms=19516, queries/sec=51.240005
&lt;br&gt;query = 'Hello World!' &amp;nbsp;****** XOM can't handle this query: XPath expression 'Hello World!' did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = count(//line) &amp;nbsp;****** XOM can't handle this query: XPath expression count(//line) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //line &amp;nbsp; ms=8750, queries/sec=114.28571
&lt;br&gt;query = 1+1 &amp;nbsp;****** XOM can't handle this query: XPath expression 1+1 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //speech[speaker = 'Rom.'] &amp;nbsp; ms=8140, queries/sec=122.85012
&lt;br&gt;query = //speech[speaker = 'Jul.'] &amp;nbsp; ms=8125, queries/sec=123.07692
&lt;br&gt;query = //line[ancestor::act[@id='5']/scene[@id='3']] &amp;nbsp; ms=16891, queries/sec=59.203125
&lt;br&gt;query = true() and true() and true() and true() and true() &amp;nbsp;****** XOM can't handle this query: XPath expression true() and true() and true() and true() and true() did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //*[@id] &amp;nbsp; ms=11484, queries/sec=87.077675
&lt;br&gt;query = (count(descendant::*) + count(ancestor::*) + count(following::*) + count(preceding::*)) &amp;gt;= 5034 &amp;nbsp;****** XOM can't handle this query: XPath expression (count(descendant::*) + count(ancestor::*) + count(following::*) + count(preceding::*)) &amp;gt;= 5034 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = contains('1234567890','9') &amp;nbsp;****** XOM can't handle this query: XPath expression contains('1234567890','9') did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = //processing-instruction() &amp;nbsp; ms=7828, queries/sec=127.74655
&lt;br&gt;query = following-sibling::* &amp;nbsp; ms=16, queries/sec=62499.996
&lt;br&gt;query = name(node()) &amp;nbsp;****** XOM can't handle this query: XPath expression name(node()) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = sum(//act/@id) &amp;nbsp;****** XOM can't handle this query: XPath expression sum(//act/@id) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = /guttext/play/playbody/act[@id='5']/scene[@id='3']/speech &amp;nbsp; ms=63, queries/sec=15873.016
&lt;br&gt;query = normalize-space(string(distinct-values(/guttext/markupmeta/gutdate))) &amp;nbsp;****** XOM can't handle this query: XPath error: No Such Function distinct-values
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', -42, 1.0e0 div 0) &amp;nbsp;****** XOM can't handle this query: XPath error: Expected: )
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', 0, 3) &amp;nbsp;****** XOM can't handle this query: XPath expression substring('12345', 0, 3) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = substring('12345', 1.5, 2.6) &amp;nbsp;****** XOM can't handle this query: XPath expression substring('12345', 1.5, 2.6) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = -5 mod -2 &amp;nbsp;****** XOM can't handle this query: XPath expression -5 mod -2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = -5 mod 2 &amp;nbsp;****** XOM can't handle this query: XPath expression -5 mod 2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = 5 mod -2 &amp;nbsp;****** XOM can't handle this query: XPath expression 5 mod -2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = 5 mod 2 &amp;nbsp;****** XOM can't handle this query: XPath expression 5 mod 2 did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = normalize-space( ' &amp;nbsp;qwerty ' ) &amp;nbsp;****** XOM can't handle this query: XPath expression normalize-space( ' &amp;nbsp;qwerty ' ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = ceiling( 3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression ceiling( 3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = floor( 3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression floor( 3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = ceiling( -3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression ceiling( -3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = floor( -3.1415 ) &amp;nbsp;****** XOM can't handle this query: XPath expression floor( -3.1415 ) did not return a node-set.
&lt;br&gt;&amp;nbsp;ms=0, queries/sec=Infinity
&lt;br&gt;query = /guttext/play/playbody/act &amp;nbsp; ms=15, queries/sec=66666.67
&lt;br&gt;done with repetition 2
&lt;br&gt;&lt;br&gt;&lt;br /&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Fwd%3A-Jaxen-performance-test-results-tp25992970p25992970.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25991683</id>
	<title>[jira] Commented: (JAXEN-206) bad order when context is a list of nodes at different depths</title>
	<published>2009-10-21T05:37:26Z</published>
	<updated>2009-10-21T05:37:26Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-206?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=195447#action_195447&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-206?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=195447#action_195447&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Brian Ewins commented on JAXEN-206:
&lt;br&gt;-----------------------------------
&lt;br&gt;&lt;br&gt;Its not going to affect many people. I remember years ago someone asking on the list about passing in lists - they were using some non-xpath criteria to create the context. But while the example above will only affect people relying on jaxen's contract that it will return nodes in document order, its possible to turn this into an evaluation error for everyone:
&lt;br&gt;&lt;br&gt;XPath xpath = new DOMXPath(&amp;quot;local-name(parent::*)&amp;quot;);
&lt;br&gt;assertEquals(&amp;quot;z&amp;quot;, xpath.stringValueOf(context));
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; bad order when context is a list of nodes at different depths
&lt;br&gt;&amp;gt; -------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-206
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-206&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-206&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: core
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.1.3
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Brian Ewins
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: mismatch.patch
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; As described by Elliotte on the list:
&lt;br&gt;&amp;gt; Consider this:
&lt;br&gt;&amp;gt; &amp;lt;z&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;a&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;b/&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;/a&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;c/&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;/z&amp;gt;
&lt;br&gt;&amp;gt; Suppose the list includes b and c in document order. c's parent
&lt;br&gt;&amp;gt; precedes b's parent even though b precedes c
&lt;br&gt;&amp;gt; When calling xpath.selectNodes(context) we can supply a list of nodes instead of a single node. By supplying a list containing b and c as described above, and selecting &amp;quot;parent::*&amp;quot;, we should get the list [z, a] returned. Instead we get [a, z]. The reason is that DefaultLocationPath does not sort the nodes into document order when there is only a single step in the location path.
&lt;br&gt;&amp;gt; Patch attached, including test case.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-206%29-bad-order-when-context-is-a-list-of-nodes-at-different-depths-tp25990751p25991683.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25990942</id>
	<title>[jira] Commented: (JAXEN-206) bad order when context is a list of nodes at different depths</title>
	<published>2009-10-21T04:45:26Z</published>
	<updated>2009-10-21T04:45:26Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-206?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=195443#action_195443&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-206?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=195443#action_195443&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Elliotte Rusty Harold commented on JAXEN-206:
&lt;br&gt;---------------------------------------------
&lt;br&gt;&lt;br&gt;I'll try and patch this in soon. Meanwhile, do you know who to talk to to get committer access back? I don't think I can do it.
&lt;br&gt;&lt;br&gt;How bad is this? Will this only affect someone calling a more-or-less internal method in the API, or is it possible this could cause incorrect XPath evaluation on actual documents? 
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; bad order when context is a list of nodes at different depths
&lt;br&gt;&amp;gt; -------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-206
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-206&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-206&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: core
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.1.3
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Brian Ewins
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: mismatch.patch
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; As described by Elliotte on the list:
&lt;br&gt;&amp;gt; Consider this:
&lt;br&gt;&amp;gt; &amp;lt;z&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;a&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;b/&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;/a&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;c/&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;/z&amp;gt;
&lt;br&gt;&amp;gt; Suppose the list includes b and c in document order. c's parent
&lt;br&gt;&amp;gt; precedes b's parent even though b precedes c
&lt;br&gt;&amp;gt; When calling xpath.selectNodes(context) we can supply a list of nodes instead of a single node. By supplying a list containing b and c as described above, and selecting &amp;quot;parent::*&amp;quot;, we should get the list [z, a] returned. Instead we get [a, z]. The reason is that DefaultLocationPath does not sort the nodes into document order when there is only a single step in the location path.
&lt;br&gt;&amp;gt; Patch attached, including test case.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-206%29-bad-order-when-context-is-a-list-of-nodes-at-different-depths-tp25990751p25990942.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25990753</id>
	<title>[jira] Updated: (JAXEN-206) bad order when context is a list of nodes at different depths</title>
	<published>2009-10-21T04:27:27Z</published>
	<updated>2009-10-21T04:27:27Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-206?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-206?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Brian Ewins updated JAXEN-206:
&lt;br&gt;------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Description: 
&lt;br&gt;As described by Elliotte on the list:
&lt;br&gt;Consider this:
&lt;br&gt;&lt;br&gt;&amp;lt;z&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;a&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;b/&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;/a&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;c/&amp;gt;
&lt;br&gt;&amp;lt;/z&amp;gt;
&lt;br&gt;&lt;br&gt;Suppose the list includes b and c in document order. c's parent
&lt;br&gt;precedes b's parent even though b precedes c
&lt;br&gt;&lt;br&gt;When calling xpath.selectNodes(context) we can supply a list of nodes instead of a single node. By supplying a list containing b and c as described above, and selecting &amp;quot;parent::*&amp;quot;, we should get the list [z, a] returned. Instead we get [a, z]. The reason is that DefaultLocationPath does not sort the nodes into document order when there is only a single step in the location path.
&lt;br&gt;&lt;br&gt;Patch attached, including test case.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; was:
&lt;br&gt;As described by Elliotte on the list:
&lt;br&gt;Consider this:
&lt;br&gt;&lt;br&gt;&amp;lt;z&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;a&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;b/&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;/a&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;c/&amp;gt;
&lt;br&gt;&amp;lt;/z&amp;gt;
&lt;br&gt;&lt;br&gt;Suppose the list includes b and c in document order. c's parent
&lt;br&gt;precedes b's parent even though b precedes c
&lt;br&gt;&lt;br&gt;When calling xpath.selectNodes(context) we can supply a list of nodes instead of a single node. By supplying a list containing b and c as described above, and selecting &amp;quot;parent::*&amp;quot;, we should get the list [z, a] returInstead we get [a, z]. The reason is that DefaultLocationPath does not sort the nodes into document order when there is only a single step in the location path.
&lt;br&gt;&lt;br&gt;Patch attached, including test case.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; bad order when context is a list of nodes at different depths
&lt;br&gt;&amp;gt; -------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-206
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-206&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-206&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: core
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.1.3
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Brian Ewins
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: mismatch.patch
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; As described by Elliotte on the list:
&lt;br&gt;&amp;gt; Consider this:
&lt;br&gt;&amp;gt; &amp;lt;z&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;a&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;lt;b/&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;/a&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;lt;c/&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;/z&amp;gt;
&lt;br&gt;&amp;gt; Suppose the list includes b and c in document order. c's parent
&lt;br&gt;&amp;gt; precedes b's parent even though b precedes c
&lt;br&gt;&amp;gt; When calling xpath.selectNodes(context) we can supply a list of nodes instead of a single node. By supplying a list containing b and c as described above, and selecting &amp;quot;parent::*&amp;quot;, we should get the list [z, a] returned. Instead we get [a, z]. The reason is that DefaultLocationPath does not sort the nodes into document order when there is only a single step in the location path.
&lt;br&gt;&amp;gt; Patch attached, including test case.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-206%29-bad-order-when-context-is-a-list-of-nodes-at-different-depths-tp25990751p25990753.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25990751</id>
	<title>[jira] Created: (JAXEN-206) bad order when context is a list of nodes at different depths</title>
	<published>2009-10-21T04:27:27Z</published>
	<updated>2009-10-21T04:27:27Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">bad order when context is a list of nodes at different depths
&lt;br&gt;-------------------------------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Key: JAXEN-206
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-206&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-206&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Project: jaxen
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Issue Type: Bug
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Components: core
&lt;br&gt;&amp;nbsp; &amp;nbsp; Affects Versions: 1.1.3
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Reporter: Brian Ewins
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Attachments: mismatch.patch
&lt;br&gt;&lt;br&gt;As described by Elliotte on the list:
&lt;br&gt;Consider this:
&lt;br&gt;&lt;br&gt;&amp;lt;z&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;a&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;b/&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;/a&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;c/&amp;gt;
&lt;br&gt;&amp;lt;/z&amp;gt;
&lt;br&gt;&lt;br&gt;Suppose the list includes b and c in document order. c's parent
&lt;br&gt;precedes b's parent even though b precedes c
&lt;br&gt;&lt;br&gt;When calling xpath.selectNodes(context) we can supply a list of nodes instead of a single node. By supplying a list containing b and c as described above, and selecting &amp;quot;parent::*&amp;quot;, we should get the list [z, a] returInstead we get [a, z]. The reason is that DefaultLocationPath does not sort the nodes into document order when there is only a single step in the location path.
&lt;br&gt;&lt;br&gt;Patch attached, including test case.
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-206%29-bad-order-when-context-is-a-list-of-nodes-at-different-depths-tp25990751p25990751.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25990420</id>
	<title>Re: [jira] Updated: (JAXEN-31) if jaxen stopped using  lists it would be 37x faster</title>
	<published>2009-10-21T04:02:35Z</published>
	<updated>2009-10-21T04:02:35Z</updated>
	<author>
		<name>Baz-4</name>
	</author>
	<content type="html">2009/10/20 Baz &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25990420&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;brian.ewins@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 2009/10/20 Elliotte Rusty Harold &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25990420&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;elharo@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt; On Tue, Oct 20, 2009 at 5:30 AM, Brian Ewins (JIRA) &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25990420&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jira@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;     [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Brian Ewins updated JAXEN-31:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; -----------------------------
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;    Attachment: perf.patch
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Ok, I have gone one step further and turned off the sort whenever the location path only uses the parent, self, or child axes (a very common case). The theory here is that given a list of nodes X in document order, then X/parent::*, X/self::*, and X/child::* are also in document order; that a whole location path consisting of these axes is also ordered follows by induction. Other axes do not support this assertion, and removing the sort for them would trigger JAXEN-55. Do you agree with this analysis Elliotte?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I don't think so, at least not for the parent axis. Consider this:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;lt;z&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;  &amp;lt;a&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;    &amp;lt;b/&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;  &amp;lt;/a&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;  &amp;lt;c/&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;lt;/z&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Suppose the list includes b and c in document order. c's parent
&lt;br&gt;&amp;gt;&amp;gt; precedes b's parent even though b precedes c (unless I'm forgetting
&lt;br&gt;&amp;gt;&amp;gt; the exact rules for document order, which is possible)
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hmm, I've slightly misstated myself - I knew we'd get problems like
&lt;br&gt;&amp;gt; that if the depth varied, that's what jaxen-55 is about. X was
&lt;br&gt;&amp;gt; supposed to be nodes in document order /at the same depth/. The three
&lt;br&gt;&amp;gt; axes I mentioned (also attribute:: and namespace::) produce result
&lt;br&gt;&amp;gt; nodes which all have the same depth too, and preserve order for that
&lt;br&gt;&amp;gt; case only. (the sibling axes preserve depth but not order)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; If the assumption that the initial nodeset X is not sorted and the
&lt;br&gt;&amp;gt; same depth is incorrect, then we have another bug: the current jaxen
&lt;br&gt;&amp;gt; code does not sort after evaluating a single step, eg if we started
&lt;br&gt;&amp;gt; with {b, c} in your example.
&lt;/div&gt;&lt;br&gt;Ok - we do in fact have this bug, here's a test case based on your email:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; public void testMismatchedDepthsInContext()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; throws JaxenException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; XPath xpath = new DOMXPath(&amp;quot;parent::*&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; org.w3c.dom.Element z = doc.createElementNS(&amp;quot;&amp;quot;, &amp;quot;z&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; doc.appendChild(z);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; org.w3c.dom.Element a = doc.createElementNS(&amp;quot;&amp;quot;, &amp;quot;a&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; z.appendChild(a);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; org.w3c.dom.Element b = doc.createElementNS(&amp;quot;&amp;quot;, &amp;quot;b&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; a.appendChild(b);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; org.w3c.dom.Element c = doc.createElementNS(&amp;quot;&amp;quot;, &amp;quot;c&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; z.appendChild(c);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; List context = new ArrayList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; context.add(b);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; context.add(c);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; List result = xpath.selectNodes(context);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assertEquals(z, result.get(0));
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&lt;br&gt;Ouch. Fixing current jaxen and the fast path patch is easiest if we
&lt;br&gt;just check that the context size is 1 (otherwise require the sort).
&lt;br&gt;&lt;br&gt;This (in DefaultLocationPath) fixes the bug in svn HEAD:
&lt;br&gt;&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (getSteps().size() &amp;gt; 1) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (getSteps().size() &amp;gt; 1|| nodeSet.size() &amp;gt; 1) {
&lt;br&gt;&lt;br&gt;the fix in the perf patch is a bit more involved as we want to avoid
&lt;br&gt;that second call to size(); however I have a working fix. I'll post a
&lt;br&gt;bug report, patch etc.
&lt;br&gt;&lt;br&gt;-Baz
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hopefully we don't allow the user to supply a list as the context... I
&lt;br&gt;&amp;gt; don't have the code in front of me.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -Baz
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; Elliotte Rusty Harold
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25990420&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;elharo@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; To unsubscribe from this list, please visit:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;    &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Updated%3A-%28JAXEN-31%29-if-jaxen-stopped-using-lists-it-would-be-37x-faster-tp25972247p25990420.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25983652</id>
	<title>Re: [jira] Updated: (JAXEN-31) if jaxen stopped using  lists it would be 37x faster</title>
	<published>2009-10-20T15:29:56Z</published>
	<updated>2009-10-20T15:29:56Z</updated>
	<author>
		<name>Baz-4</name>
	</author>
	<content type="html">2009/10/20 Elliotte Rusty Harold &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25983652&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;elharo@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Tue, Oct 20, 2009 at 5:30 AM, Brian Ewins (JIRA) &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25983652&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jira@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;     [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Brian Ewins updated JAXEN-31:
&lt;br&gt;&amp;gt;&amp;gt; -----------------------------
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;    Attachment: perf.patch
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Ok, I have gone one step further and turned off the sort whenever the location path only uses the parent, self, or child axes (a very common case). The theory here is that given a list of nodes X in document order, then X/parent::*, X/self::*, and X/child::* are also in document order; that a whole location path consisting of these axes is also ordered follows by induction. Other axes do not support this assertion, and removing the sort for them would trigger JAXEN-55. Do you agree with this analysis Elliotte?
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I don't think so, at least not for the parent axis. Consider this:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;z&amp;gt;
&lt;br&gt;&amp;gt;  &amp;lt;a&amp;gt;
&lt;br&gt;&amp;gt;    &amp;lt;b/&amp;gt;
&lt;br&gt;&amp;gt;  &amp;lt;/a&amp;gt;
&lt;br&gt;&amp;gt;  &amp;lt;c/&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;/z&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Suppose the list includes b and c in document order. c's parent
&lt;br&gt;&amp;gt; precedes b's parent even though b precedes c (unless I'm forgetting
&lt;br&gt;&amp;gt; the exact rules for document order, which is possible)
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;Hmm, I've slightly misstated myself - I knew we'd get problems like
&lt;br&gt;that if the depth varied, that's what jaxen-55 is about. X was
&lt;br&gt;supposed to be nodes in document order /at the same depth/. The three
&lt;br&gt;axes I mentioned (also attribute:: and namespace::) produce result
&lt;br&gt;nodes which all have the same depth too, and preserve order for that
&lt;br&gt;case only. (the sibling axes preserve depth but not order)
&lt;br&gt;&lt;br&gt;If the assumption that the initial nodeset X is not sorted and the
&lt;br&gt;same depth is incorrect, then we have another bug: the current jaxen
&lt;br&gt;code does not sort after evaluating a single step, eg if we started
&lt;br&gt;with {b, c} in your example.
&lt;br&gt;&lt;br&gt;Hopefully we don't allow the user to supply a list as the context... I
&lt;br&gt;don't have the code in front of me.
&lt;br&gt;&lt;br&gt;-Baz
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Elliotte Rusty Harold
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25983652&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;elharo@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe from this list, please visit:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;    &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Updated%3A-%28JAXEN-31%29-if-jaxen-stopped-using-lists-it-would-be-37x-faster-tp25972247p25983652.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25982138</id>
	<title>Re: [jira] Updated: (JAXEN-31) if jaxen stopped using  lists it would be 37x faster</title>
	<published>2009-10-20T13:38:27Z</published>
	<updated>2009-10-20T13:38:27Z</updated>
	<author>
		<name>Elliotte Rusty Harold-2</name>
	</author>
	<content type="html">On Tue, Oct 20, 2009 at 5:30 AM, Brian Ewins (JIRA) &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25982138&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jira@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;     [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Brian Ewins updated JAXEN-31:
&lt;br&gt;&amp;gt; -----------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;    Attachment: perf.patch
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Ok, I have gone one step further and turned off the sort whenever the location path only uses the parent, self, or child axes (a very common case). The theory here is that given a list of nodes X in document order, then X/parent::*, X/self::*, and X/child::* are also in document order; that a whole location path consisting of these axes is also ordered follows by induction. Other axes do not support this assertion, and removing the sort for them would trigger JAXEN-55. Do you agree with this analysis Elliotte?
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;I don't think so, at least not for the parent axis. Consider this:
&lt;br&gt;&lt;br&gt;&amp;lt;z&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;lt;a&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;b/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;lt;/a&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;lt;c/&amp;gt;
&lt;br&gt;&amp;lt;/z&amp;gt;
&lt;br&gt;&lt;br&gt;Suppose the list includes b and c in document order. c's parent
&lt;br&gt;precedes b's parent even though b precedes c (unless I'm forgetting
&lt;br&gt;the exact rules for document order, which is possible)
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Elliotte Rusty Harold
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25982138&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;elharo@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Updated%3A-%28JAXEN-31%29-if-jaxen-stopped-using-lists-it-would-be-37x-faster-tp25972247p25982138.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25972247</id>
	<title>[jira] Updated: (JAXEN-31) if jaxen stopped using lists it would be 37x faster</title>
	<published>2009-10-20T02:30:27Z</published>
	<updated>2009-10-20T02:30:27Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Brian Ewins updated JAXEN-31:
&lt;br&gt;-----------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: perf.patch
&lt;br&gt;&lt;br&gt;Ok, I have gone one step further and turned off the sort whenever the location path only uses the parent, self, or child axes (a very common case). The theory here is that given a list of nodes X in document order, then X/parent::*, X/self::*, and X/child::* are also in document order; that a whole location path consisting of these axes is also ordered follows by induction. Other axes do not support this assertion, and removing the sort for them would trigger JAXEN-55. Do you agree with this analysis Elliotte? 
&lt;br&gt;&lt;br&gt;All tests still pass. The performance gains are back towards the title of this bug - XOMPerformance goes from 4.9s to 97ms on my machine. Its a shame I can't get this simple trick to work for descendant-or-self but this is quite a big win as it stands.
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; if jaxen stopped using lists it would be 37x faster
&lt;br&gt;&amp;gt; ---------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-31
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Brian Ewins
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 2.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: Brian_Ewins_JAXEN-31_perf.patch, jaxen.zip, perf.patch, perf.patch, perf.patch, stuff.tgz
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; Original Estimate: 1 week
&lt;br&gt;&amp;gt; &amp;nbsp;Remaining Estimate: 1 week
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The short story - I've rewritten jaxen to use a nodeset abstraction instead of a list to accumulate results. With the unit tests at nearly 100%, the performance test on dom4j runs in ~200ms on my 1GHz powerbook, compared to ~7400ms for the nightly jaxen build. The failing unit tests are for paths not covered in the performance test.
&lt;br&gt;&amp;gt; The long story - I wrote an implementation of the draft ISO Schematron spec on top of Jaxen, instead of the more usual XSLT. The schematron spec is designed so this can be done, mainly for performance reasons. Once I had enough working I was able to compare jaxen with xalan on the 'screamatron' torture test, which is using schematron to validate the schematron 1.5 spec. I was suprised to find that jaxen was about 2x /slower/ than xalan, and marginally slower with a jdom navigator than a dom4j navigator. Looking at why it was so slow, it became clear that the problem was that throughout jaxen it's building lists of intermediate results to filter down, instead of generating the 'next' result on demand. There's comments about this in several places in the code, but the list thing is so ingrained it needs more than a little refactoring to fix. 
&lt;br&gt;&amp;gt; I decided to have a go. This change produces apis incompatible with previous versions of jaxen, so this will be a lump of code not a wee patch. I've basically cloned jaxen to 'org.jaxen2' to work on it. I'm nearly done with the changes, failing tests for the non-xpath extension functions which I havent implemented yet, patterns (not touched at all yet), and a couple of minor bugs.
&lt;br&gt;&amp;gt; I'll post the code on jira once I'm done, but here's the gist of the changes I made:
&lt;br&gt;&amp;gt; - Introduce a Nodeset abstraction instead of a list...
&lt;br&gt;&amp;gt; public interface extends Iterator {
&lt;br&gt;&amp;gt; Object current();
&lt;br&gt;&amp;gt; int position();
&lt;br&gt;&amp;gt; // use of last() replaces the internal iterator with an iterator over a list caching results.
&lt;br&gt;&amp;gt; // it's basically a fallback on what jaxen used to do.
&lt;br&gt;&amp;gt; int last();
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; the reason for this is obvious, eg you can just test 'hasNext()' to check the boolean value of a nodeset.
&lt;br&gt;&amp;gt; - change the signature of Expr to allow the selection of a fast code path
&lt;br&gt;&amp;gt; public interface Expr {
&lt;br&gt;&amp;gt; // these require context because of variable/function refs only. see later.
&lt;br&gt;&amp;gt; boolean isBoolean(Context ctx);
&lt;br&gt;&amp;gt; boolean isNumber(Context ctx);
&lt;br&gt;&amp;gt; boolean isString(Context ctx);
&lt;br&gt;&amp;gt; boolean isNodeset(Context ctx);
&lt;br&gt;&amp;gt; boolean booleanValue(Context ctx);
&lt;br&gt;&amp;gt; double numberValue(Context ctx);
&lt;br&gt;&amp;gt; String stringValue(Context ctx);
&lt;br&gt;&amp;gt; Nodeset nodesetValue(Context ctx);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this is really for my own sanity as there's so much code to maintain. Throughout jaxen, everything is untyped, so its fairly easy to (eg) pass a nodeSet when you meant to pass a node; there's instanceof checks, == null checks, and casts everywhere to deal with this. &amp;nbsp;Once you put everything behind an interface like the one above, making objects responsible for their own casts, a lot of the code is simplified, eg addition is just expr1.numberValue(ctx) + expr2.numberValue(ctx). All but a couple of classes inherit from abstract base classes that implement all but one of those methods (eg StringExprBase leaves stringValue() abstract.) &amp;nbsp;
&lt;br&gt;&amp;gt; Variable/Function refs don't have a type without context in my version, &amp;nbsp;and like Jaxen I look up functions, variables every time. This isn't smart - in xpath we can resolve all variable, function refs beforehand, and get faster code as a result. I'll probably change things so I have 'bound' and 'unbound' exprs, add 'BoundExpr bind(VariableContext,FunctionContext)'. I'll still need to pass these as members of Context to support the 'evaluate' extension function though.
&lt;br&gt;&amp;gt; Another approach to the same concern that I didn't try is to pass in a typed context, eg 'StringContext', 'NodesetContext', etc (think of this as allowing things like perl's 'wantarray()'. That approach would make it easier to expand the number of supported types (eg for xpath2) in future, I'll try it once the tests pass.
&lt;br&gt;&amp;gt; - moved all the functions to a single utility class
&lt;br&gt;&amp;gt; public class Functions {
&lt;br&gt;&amp;gt; String substring(String s, double start, double end);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this makes it easier to unit test the xpath functions, since they are mostly context-independent. Functions that need a navigator get it passed as the first arg, functions that optionally use the context node instead of an argument have that function added as a method of Context. Incidentally I changed some of the unit tests to get mine to pass - in particular I changed the substring() tests back to match the spec (they don't currently).
&lt;br&gt;&amp;gt; No function in my version returns null. (compare to eg the name, namespaceuri functions of Navigator). The xpath spec uses &amp;quot;&amp;quot; or an empty nodeset throughout, so do I, this gets rid of a lot of == null checks. 
&lt;br&gt;&amp;gt; Some of the bugs against the current version of jaxen are fixed by this code - eg the use of double throughout allows gt/lt comparisons of longs (bug jaxen-28), + both of the bugs I filed previously.
&lt;br&gt;&amp;gt; I'd estimate I can finish this in the next week.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Updated%3A-%28JAXEN-31%29-if-jaxen-stopped-using-lists-it-would-be-37x-faster-tp25972247p25972247.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25962992</id>
	<title>[jira] Updated: (JAXEN-31) if jaxen stopped using lists it would be 37x faster</title>
	<published>2009-10-19T11:12:27Z</published>
	<updated>2009-10-19T11:12:27Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Brian Ewins updated JAXEN-31:
&lt;br&gt;-----------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: perf.patch
&lt;br&gt;&lt;br&gt;This version of the patch passes all tests (w00t!), and reduces the number of places that force the lazy list to be filled. I've refactored the lazy list itself a bit, so that a separate method, fill(), is called when filling is forced for the first time. This makes it easy to find the culprits in the debugger.
&lt;br&gt;&lt;br&gt;Debugging XOMPerformance.java, there is only one culprit - the call to Collections.sort() in DefaultLocationPath. Sorting should always be unnecessary - since we deal with nodes that are either already sorted in a forward or reverse direction, we at most need to perform a reverse and a merge.
&lt;br&gt;&lt;br&gt;BTW, I am seeing this version as being /slower/ for that test than svn head - 5.9s versus 4.9s. Seems like a lot of overhead wrapping iterators in lists in iterators... Aleksander, how does this perform in your real world case? 
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; if jaxen stopped using lists it would be 37x faster
&lt;br&gt;&amp;gt; ---------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-31
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Brian Ewins
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 2.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: Brian_Ewins_JAXEN-31_perf.patch, jaxen.zip, perf.patch, perf.patch, stuff.tgz
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; Original Estimate: 1 week
&lt;br&gt;&amp;gt; &amp;nbsp;Remaining Estimate: 1 week
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The short story - I've rewritten jaxen to use a nodeset abstraction instead of a list to accumulate results. With the unit tests at nearly 100%, the performance test on dom4j runs in ~200ms on my 1GHz powerbook, compared to ~7400ms for the nightly jaxen build. The failing unit tests are for paths not covered in the performance test.
&lt;br&gt;&amp;gt; The long story - I wrote an implementation of the draft ISO Schematron spec on top of Jaxen, instead of the more usual XSLT. The schematron spec is designed so this can be done, mainly for performance reasons. Once I had enough working I was able to compare jaxen with xalan on the 'screamatron' torture test, which is using schematron to validate the schematron 1.5 spec. I was suprised to find that jaxen was about 2x /slower/ than xalan, and marginally slower with a jdom navigator than a dom4j navigator. Looking at why it was so slow, it became clear that the problem was that throughout jaxen it's building lists of intermediate results to filter down, instead of generating the 'next' result on demand. There's comments about this in several places in the code, but the list thing is so ingrained it needs more than a little refactoring to fix. 
&lt;br&gt;&amp;gt; I decided to have a go. This change produces apis incompatible with previous versions of jaxen, so this will be a lump of code not a wee patch. I've basically cloned jaxen to 'org.jaxen2' to work on it. I'm nearly done with the changes, failing tests for the non-xpath extension functions which I havent implemented yet, patterns (not touched at all yet), and a couple of minor bugs.
&lt;br&gt;&amp;gt; I'll post the code on jira once I'm done, but here's the gist of the changes I made:
&lt;br&gt;&amp;gt; - Introduce a Nodeset abstraction instead of a list...
&lt;br&gt;&amp;gt; public interface extends Iterator {
&lt;br&gt;&amp;gt; Object current();
&lt;br&gt;&amp;gt; int position();
&lt;br&gt;&amp;gt; // use of last() replaces the internal iterator with an iterator over a list caching results.
&lt;br&gt;&amp;gt; // it's basically a fallback on what jaxen used to do.
&lt;br&gt;&amp;gt; int last();
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; the reason for this is obvious, eg you can just test 'hasNext()' to check the boolean value of a nodeset.
&lt;br&gt;&amp;gt; - change the signature of Expr to allow the selection of a fast code path
&lt;br&gt;&amp;gt; public interface Expr {
&lt;br&gt;&amp;gt; // these require context because of variable/function refs only. see later.
&lt;br&gt;&amp;gt; boolean isBoolean(Context ctx);
&lt;br&gt;&amp;gt; boolean isNumber(Context ctx);
&lt;br&gt;&amp;gt; boolean isString(Context ctx);
&lt;br&gt;&amp;gt; boolean isNodeset(Context ctx);
&lt;br&gt;&amp;gt; boolean booleanValue(Context ctx);
&lt;br&gt;&amp;gt; double numberValue(Context ctx);
&lt;br&gt;&amp;gt; String stringValue(Context ctx);
&lt;br&gt;&amp;gt; Nodeset nodesetValue(Context ctx);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this is really for my own sanity as there's so much code to maintain. Throughout jaxen, everything is untyped, so its fairly easy to (eg) pass a nodeSet when you meant to pass a node; there's instanceof checks, == null checks, and casts everywhere to deal with this. &amp;nbsp;Once you put everything behind an interface like the one above, making objects responsible for their own casts, a lot of the code is simplified, eg addition is just expr1.numberValue(ctx) + expr2.numberValue(ctx). All but a couple of classes inherit from abstract base classes that implement all but one of those methods (eg StringExprBase leaves stringValue() abstract.) &amp;nbsp;
&lt;br&gt;&amp;gt; Variable/Function refs don't have a type without context in my version, &amp;nbsp;and like Jaxen I look up functions, variables every time. This isn't smart - in xpath we can resolve all variable, function refs beforehand, and get faster code as a result. I'll probably change things so I have 'bound' and 'unbound' exprs, add 'BoundExpr bind(VariableContext,FunctionContext)'. I'll still need to pass these as members of Context to support the 'evaluate' extension function though.
&lt;br&gt;&amp;gt; Another approach to the same concern that I didn't try is to pass in a typed context, eg 'StringContext', 'NodesetContext', etc (think of this as allowing things like perl's 'wantarray()'. That approach would make it easier to expand the number of supported types (eg for xpath2) in future, I'll try it once the tests pass.
&lt;br&gt;&amp;gt; - moved all the functions to a single utility class
&lt;br&gt;&amp;gt; public class Functions {
&lt;br&gt;&amp;gt; String substring(String s, double start, double end);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this makes it easier to unit test the xpath functions, since they are mostly context-independent. Functions that need a navigator get it passed as the first arg, functions that optionally use the context node instead of an argument have that function added as a method of Context. Incidentally I changed some of the unit tests to get mine to pass - in particular I changed the substring() tests back to match the spec (they don't currently).
&lt;br&gt;&amp;gt; No function in my version returns null. (compare to eg the name, namespaceuri functions of Navigator). The xpath spec uses &amp;quot;&amp;quot; or an empty nodeset throughout, so do I, this gets rid of a lot of == null checks. 
&lt;br&gt;&amp;gt; Some of the bugs against the current version of jaxen are fixed by this code - eg the use of double throughout allows gt/lt comparisons of longs (bug jaxen-28), + both of the bugs I filed previously.
&lt;br&gt;&amp;gt; I'd estimate I can finish this in the next week.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Updated%3A-%28JAXEN-31%29-if-jaxen-stopped-using-lists-it-would-be-37x-faster-tp25962992p25962992.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25958219</id>
	<title>[jira] Commented: (JAXEN-31) if jaxen stopped using lists it would be 37x faster</title>
	<published>2009-10-19T06:14:26Z</published>
	<updated>2009-10-19T06:14:26Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=195242#action_195242&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=195242#action_195242&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Brian Ewins commented on JAXEN-31:
&lt;br&gt;----------------------------------
&lt;br&gt;&lt;br&gt;(A bit off topic here) yes, or more accurately I was a committer. I hadn't pushed anything for a while, and then an ssh key vulnerability was announced, which led to all vulnerable ssh keys - including mine - being disabled everywhere. I never submitted a new one, so effectively I'm out of the loop. &amp;nbsp;I'm still monitoring the mailing list and following you on twitter tho!
&lt;br&gt;&lt;br&gt;Also, I wouldn't expect to see this land until all the tests pass; its not quite there yet, though its not far off (2 real failures now). So pushing all of this isn't an option for now, though as I see you've just commented elsewhere, landing bits of it, like isEmpty(), might be useful.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; if jaxen stopped using lists it would be 37x faster
&lt;br&gt;&amp;gt; ---------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-31
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Brian Ewins
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 2.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: Brian_Ewins_JAXEN-31_perf.patch, jaxen.zip, perf.patch, stuff.tgz
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; Original Estimate: 1 week
&lt;br&gt;&amp;gt; &amp;nbsp;Remaining Estimate: 1 week
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The short story - I've rewritten jaxen to use a nodeset abstraction instead of a list to accumulate results. With the unit tests at nearly 100%, the performance test on dom4j runs in ~200ms on my 1GHz powerbook, compared to ~7400ms for the nightly jaxen build. The failing unit tests are for paths not covered in the performance test.
&lt;br&gt;&amp;gt; The long story - I wrote an implementation of the draft ISO Schematron spec on top of Jaxen, instead of the more usual XSLT. The schematron spec is designed so this can be done, mainly for performance reasons. Once I had enough working I was able to compare jaxen with xalan on the 'screamatron' torture test, which is using schematron to validate the schematron 1.5 spec. I was suprised to find that jaxen was about 2x /slower/ than xalan, and marginally slower with a jdom navigator than a dom4j navigator. Looking at why it was so slow, it became clear that the problem was that throughout jaxen it's building lists of intermediate results to filter down, instead of generating the 'next' result on demand. There's comments about this in several places in the code, but the list thing is so ingrained it needs more than a little refactoring to fix. 
&lt;br&gt;&amp;gt; I decided to have a go. This change produces apis incompatible with previous versions of jaxen, so this will be a lump of code not a wee patch. I've basically cloned jaxen to 'org.jaxen2' to work on it. I'm nearly done with the changes, failing tests for the non-xpath extension functions which I havent implemented yet, patterns (not touched at all yet), and a couple of minor bugs.
&lt;br&gt;&amp;gt; I'll post the code on jira once I'm done, but here's the gist of the changes I made:
&lt;br&gt;&amp;gt; - Introduce a Nodeset abstraction instead of a list...
&lt;br&gt;&amp;gt; public interface extends Iterator {
&lt;br&gt;&amp;gt; Object current();
&lt;br&gt;&amp;gt; int position();
&lt;br&gt;&amp;gt; // use of last() replaces the internal iterator with an iterator over a list caching results.
&lt;br&gt;&amp;gt; // it's basically a fallback on what jaxen used to do.
&lt;br&gt;&amp;gt; int last();
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; the reason for this is obvious, eg you can just test 'hasNext()' to check the boolean value of a nodeset.
&lt;br&gt;&amp;gt; - change the signature of Expr to allow the selection of a fast code path
&lt;br&gt;&amp;gt; public interface Expr {
&lt;br&gt;&amp;gt; // these require context because of variable/function refs only. see later.
&lt;br&gt;&amp;gt; boolean isBoolean(Context ctx);
&lt;br&gt;&amp;gt; boolean isNumber(Context ctx);
&lt;br&gt;&amp;gt; boolean isString(Context ctx);
&lt;br&gt;&amp;gt; boolean isNodeset(Context ctx);
&lt;br&gt;&amp;gt; boolean booleanValue(Context ctx);
&lt;br&gt;&amp;gt; double numberValue(Context ctx);
&lt;br&gt;&amp;gt; String stringValue(Context ctx);
&lt;br&gt;&amp;gt; Nodeset nodesetValue(Context ctx);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this is really for my own sanity as there's so much code to maintain. Throughout jaxen, everything is untyped, so its fairly easy to (eg) pass a nodeSet when you meant to pass a node; there's instanceof checks, == null checks, and casts everywhere to deal with this. &amp;nbsp;Once you put everything behind an interface like the one above, making objects responsible for their own casts, a lot of the code is simplified, eg addition is just expr1.numberValue(ctx) + expr2.numberValue(ctx). All but a couple of classes inherit from abstract base classes that implement all but one of those methods (eg StringExprBase leaves stringValue() abstract.) &amp;nbsp;
&lt;br&gt;&amp;gt; Variable/Function refs don't have a type without context in my version, &amp;nbsp;and like Jaxen I look up functions, variables every time. This isn't smart - in xpath we can resolve all variable, function refs beforehand, and get faster code as a result. I'll probably change things so I have 'bound' and 'unbound' exprs, add 'BoundExpr bind(VariableContext,FunctionContext)'. I'll still need to pass these as members of Context to support the 'evaluate' extension function though.
&lt;br&gt;&amp;gt; Another approach to the same concern that I didn't try is to pass in a typed context, eg 'StringContext', 'NodesetContext', etc (think of this as allowing things like perl's 'wantarray()'. That approach would make it easier to expand the number of supported types (eg for xpath2) in future, I'll try it once the tests pass.
&lt;br&gt;&amp;gt; - moved all the functions to a single utility class
&lt;br&gt;&amp;gt; public class Functions {
&lt;br&gt;&amp;gt; String substring(String s, double start, double end);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this makes it easier to unit test the xpath functions, since they are mostly context-independent. Functions that need a navigator get it passed as the first arg, functions that optionally use the context node instead of an argument have that function added as a method of Context. Incidentally I changed some of the unit tests to get mine to pass - in particular I changed the substring() tests back to match the spec (they don't currently).
&lt;br&gt;&amp;gt; No function in my version returns null. (compare to eg the name, namespaceuri functions of Navigator). The xpath spec uses &amp;quot;&amp;quot; or an empty nodeset throughout, so do I, this gets rid of a lot of == null checks. 
&lt;br&gt;&amp;gt; Some of the bugs against the current version of jaxen are fixed by this code - eg the use of double throughout allows gt/lt comparisons of longs (bug jaxen-28), + both of the bugs I filed previously.
&lt;br&gt;&amp;gt; I'd estimate I can finish this in the next week.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Commented%3A-%28JAXEN-31%29-if-jaxen-stopped-using-lists-it-would-be-37x-faster-tp25958219p25958219.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25957876</id>
	<title>[jira] Commented: (JAXEN-31) if jaxen stopped using lists it would be 37x faster</title>
	<published>2009-10-19T05:52:27Z</published>
	<updated>2009-10-19T05:52:27Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=195236#action_195236&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=195236#action_195236&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Elliotte Rusty Harold commented on JAXEN-31:
&lt;br&gt;--------------------------------------------
&lt;br&gt;&lt;br&gt;Looking good. I would like to get the failed tests down to zero though.
&lt;br&gt;&lt;br&gt;We could probably make Context immutable as part of a larger revision. 
&lt;br&gt;&lt;br&gt;Brian, you're a committer right? 
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; if jaxen stopped using lists it would be 37x faster
&lt;br&gt;&amp;gt; ---------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-31
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Brian Ewins
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 2.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: Brian_Ewins_JAXEN-31_perf.patch, jaxen.zip, perf.patch, stuff.tgz
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; Original Estimate: 1 week
&lt;br&gt;&amp;gt; &amp;nbsp;Remaining Estimate: 1 week
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The short story - I've rewritten jaxen to use a nodeset abstraction instead of a list to accumulate results. With the unit tests at nearly 100%, the performance test on dom4j runs in ~200ms on my 1GHz powerbook, compared to ~7400ms for the nightly jaxen build. The failing unit tests are for paths not covered in the performance test.
&lt;br&gt;&amp;gt; The long story - I wrote an implementation of the draft ISO Schematron spec on top of Jaxen, instead of the more usual XSLT. The schematron spec is designed so this can be done, mainly for performance reasons. Once I had enough working I was able to compare jaxen with xalan on the 'screamatron' torture test, which is using schematron to validate the schematron 1.5 spec. I was suprised to find that jaxen was about 2x /slower/ than xalan, and marginally slower with a jdom navigator than a dom4j navigator. Looking at why it was so slow, it became clear that the problem was that throughout jaxen it's building lists of intermediate results to filter down, instead of generating the 'next' result on demand. There's comments about this in several places in the code, but the list thing is so ingrained it needs more than a little refactoring to fix. 
&lt;br&gt;&amp;gt; I decided to have a go. This change produces apis incompatible with previous versions of jaxen, so this will be a lump of code not a wee patch. I've basically cloned jaxen to 'org.jaxen2' to work on it. I'm nearly done with the changes, failing tests for the non-xpath extension functions which I havent implemented yet, patterns (not touched at all yet), and a couple of minor bugs.
&lt;br&gt;&amp;gt; I'll post the code on jira once I'm done, but here's the gist of the changes I made:
&lt;br&gt;&amp;gt; - Introduce a Nodeset abstraction instead of a list...
&lt;br&gt;&amp;gt; public interface extends Iterator {
&lt;br&gt;&amp;gt; Object current();
&lt;br&gt;&amp;gt; int position();
&lt;br&gt;&amp;gt; // use of last() replaces the internal iterator with an iterator over a list caching results.
&lt;br&gt;&amp;gt; // it's basically a fallback on what jaxen used to do.
&lt;br&gt;&amp;gt; int last();
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; the reason for this is obvious, eg you can just test 'hasNext()' to check the boolean value of a nodeset.
&lt;br&gt;&amp;gt; - change the signature of Expr to allow the selection of a fast code path
&lt;br&gt;&amp;gt; public interface Expr {
&lt;br&gt;&amp;gt; // these require context because of variable/function refs only. see later.
&lt;br&gt;&amp;gt; boolean isBoolean(Context ctx);
&lt;br&gt;&amp;gt; boolean isNumber(Context ctx);
&lt;br&gt;&amp;gt; boolean isString(Context ctx);
&lt;br&gt;&amp;gt; boolean isNodeset(Context ctx);
&lt;br&gt;&amp;gt; boolean booleanValue(Context ctx);
&lt;br&gt;&amp;gt; double numberValue(Context ctx);
&lt;br&gt;&amp;gt; String stringValue(Context ctx);
&lt;br&gt;&amp;gt; Nodeset nodesetValue(Context ctx);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this is really for my own sanity as there's so much code to maintain. Throughout jaxen, everything is untyped, so its fairly easy to (eg) pass a nodeSet when you meant to pass a node; there's instanceof checks, == null checks, and casts everywhere to deal with this. &amp;nbsp;Once you put everything behind an interface like the one above, making objects responsible for their own casts, a lot of the code is simplified, eg addition is just expr1.numberValue(ctx) + expr2.numberValue(ctx). All but a couple of classes inherit from abstract base classes that implement all but one of those methods (eg StringExprBase leaves stringValue() abstract.) &amp;nbsp;
&lt;br&gt;&amp;gt; Variable/Function refs don't have a type without context in my version, &amp;nbsp;and like Jaxen I look up functions, variables every time. This isn't smart - in xpath we can resolve all variable, function refs beforehand, and get faster code as a result. I'll probably change things so I have 'bound' and 'unbound' exprs, add 'BoundExpr bind(VariableContext,FunctionContext)'. I'll still need to pass these as members of Context to support the 'evaluate' extension function though.
&lt;br&gt;&amp;gt; Another approach to the same concern that I didn't try is to pass in a typed context, eg 'StringContext', 'NodesetContext', etc (think of this as allowing things like perl's 'wantarray()'. That approach would make it easier to expand the number of supported types (eg for xpath2) in future, I'll try it once the tests pass.
&lt;br&gt;&amp;gt; - moved all the functions to a single utility class
&lt;br&gt;&amp;gt; public class Functions {
&lt;br&gt;&amp;gt; String substring(String s, double start, double end);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this makes it easier to unit test the xpath functions, since they are mostly context-independent. Functions that need a navigator get it passed as the first arg, functions that optionally use the context node instead of an argument have that function added as a method of Context. Incidentally I changed some of the unit tests to get mine to pass - in particular I changed the substring() tests back to match the spec (they don't currently).
&lt;br&gt;&amp;gt; No function in my version returns null. (compare to eg the name, namespaceuri functions of Navigator). The xpath spec uses &amp;quot;&amp;quot; or an empty nodeset throughout, so do I, this gets rid of a lot of == null checks. 
&lt;br&gt;&amp;gt; Some of the bugs against the current version of jaxen are fixed by this code - eg the use of double throughout allows gt/lt comparisons of longs (bug jaxen-28), + both of the bugs I filed previously.
&lt;br&gt;&amp;gt; I'd estimate I can finish this in the next week.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Commented%3A-%28JAXEN-31%29-if-jaxen-stopped-using-lists-it-would-be-37x-faster-tp25957876p25957876.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25957242</id>
	<title>[jira] Updated: (JAXEN-31) if jaxen stopped using lists it would be 37x faster</title>
	<published>2009-10-19T05:07:27Z</published>
	<updated>2009-10-19T05:07:27Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Brian Ewins updated JAXEN-31:
&lt;br&gt;-----------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: perf.patch
&lt;br&gt;&lt;br&gt;Aleksander commented that there were still a few hotspots in this version, checking isElement() etc. I had a look over the code for any obvious optimisations. I think the tests we do there are unavoidable, and the number of calls ought to match up with released version of jaxen. However, I did spot a few further improvements.
&lt;br&gt;&lt;br&gt;First thing: it turns out that removing the new ArrayList() from &amp;quot;Collections.reverse(new ArrayList(contextNodeSet));&amp;quot; in DefaultLocationPath took my failed tests down to 6 (really 2, duplicated because IDEA runs the suites and the tests). Its unclear to me why this would have any effect at all (which is worrying). 
&lt;br&gt;&lt;br&gt;Next, optimisations: there were a few things that jumped out. Any time we call context.size() we force the LazyLists introduced in the previous patch to fill up. The code quite nastily uses 'list.size() == 0' to test for emptiness, rather than using 'list.isEmpty()'. That's just bad, there's no need to know the actual size to test if a list is empty, and the LazyLists are optimised for that case; so I replaced those. There was also an avoidable use of size() testing 'size() ==1' prior to a list.get(0); I fixed this to use the iterator. &amp;nbsp;DefaultStep was not using iterators, so non-name-steps were evaluating the size. Fixing all of this did not change the test situation at all, but should have a good impact on perf.
&lt;br&gt;&lt;br&gt;There's two users of size() which are more complicated: PredicateSet and Context. Context is mutable, which is a big mistake; worse, the size, position, and nodeset are mutable separately. In order for some of the logic to work, if the nodeset changes, the position may need reset to zero; but only if the position is not explicitly set before it is used. Anyway, I've updated that code slightly so that the right thing happens, but where possible we avoid calling nodeset.size(). I've not updated the PredicateSet code - which is more complicated - so it remains the case that uses of predicates will trigger slow paths.
&lt;br&gt;&lt;br&gt;patch attached.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; if jaxen stopped using lists it would be 37x faster
&lt;br&gt;&amp;gt; ---------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-31
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Brian Ewins
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 2.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: Brian_Ewins_JAXEN-31_perf.patch, jaxen.zip, perf.patch, stuff.tgz
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; Original Estimate: 1 week
&lt;br&gt;&amp;gt; &amp;nbsp;Remaining Estimate: 1 week
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The short story - I've rewritten jaxen to use a nodeset abstraction instead of a list to accumulate results. With the unit tests at nearly 100%, the performance test on dom4j runs in ~200ms on my 1GHz powerbook, compared to ~7400ms for the nightly jaxen build. The failing unit tests are for paths not covered in the performance test.
&lt;br&gt;&amp;gt; The long story - I wrote an implementation of the draft ISO Schematron spec on top of Jaxen, instead of the more usual XSLT. The schematron spec is designed so this can be done, mainly for performance reasons. Once I had enough working I was able to compare jaxen with xalan on the 'screamatron' torture test, which is using schematron to validate the schematron 1.5 spec. I was suprised to find that jaxen was about 2x /slower/ than xalan, and marginally slower with a jdom navigator than a dom4j navigator. Looking at why it was so slow, it became clear that the problem was that throughout jaxen it's building lists of intermediate results to filter down, instead of generating the 'next' result on demand. There's comments about this in several places in the code, but the list thing is so ingrained it needs more than a little refactoring to fix. 
&lt;br&gt;&amp;gt; I decided to have a go. This change produces apis incompatible with previous versions of jaxen, so this will be a lump of code not a wee patch. I've basically cloned jaxen to 'org.jaxen2' to work on it. I'm nearly done with the changes, failing tests for the non-xpath extension functions which I havent implemented yet, patterns (not touched at all yet), and a couple of minor bugs.
&lt;br&gt;&amp;gt; I'll post the code on jira once I'm done, but here's the gist of the changes I made:
&lt;br&gt;&amp;gt; - Introduce a Nodeset abstraction instead of a list...
&lt;br&gt;&amp;gt; public interface extends Iterator {
&lt;br&gt;&amp;gt; Object current();
&lt;br&gt;&amp;gt; int position();
&lt;br&gt;&amp;gt; // use of last() replaces the internal iterator with an iterator over a list caching results.
&lt;br&gt;&amp;gt; // it's basically a fallback on what jaxen used to do.
&lt;br&gt;&amp;gt; int last();
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; the reason for this is obvious, eg you can just test 'hasNext()' to check the boolean value of a nodeset.
&lt;br&gt;&amp;gt; - change the signature of Expr to allow the selection of a fast code path
&lt;br&gt;&amp;gt; public interface Expr {
&lt;br&gt;&amp;gt; // these require context because of variable/function refs only. see later.
&lt;br&gt;&amp;gt; boolean isBoolean(Context ctx);
&lt;br&gt;&amp;gt; boolean isNumber(Context ctx);
&lt;br&gt;&amp;gt; boolean isString(Context ctx);
&lt;br&gt;&amp;gt; boolean isNodeset(Context ctx);
&lt;br&gt;&amp;gt; boolean booleanValue(Context ctx);
&lt;br&gt;&amp;gt; double numberValue(Context ctx);
&lt;br&gt;&amp;gt; String stringValue(Context ctx);
&lt;br&gt;&amp;gt; Nodeset nodesetValue(Context ctx);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this is really for my own sanity as there's so much code to maintain. Throughout jaxen, everything is untyped, so its fairly easy to (eg) pass a nodeSet when you meant to pass a node; there's instanceof checks, == null checks, and casts everywhere to deal with this. &amp;nbsp;Once you put everything behind an interface like the one above, making objects responsible for their own casts, a lot of the code is simplified, eg addition is just expr1.numberValue(ctx) + expr2.numberValue(ctx). All but a couple of classes inherit from abstract base classes that implement all but one of those methods (eg StringExprBase leaves stringValue() abstract.) &amp;nbsp;
&lt;br&gt;&amp;gt; Variable/Function refs don't have a type without context in my version, &amp;nbsp;and like Jaxen I look up functions, variables every time. This isn't smart - in xpath we can resolve all variable, function refs beforehand, and get faster code as a result. I'll probably change things so I have 'bound' and 'unbound' exprs, add 'BoundExpr bind(VariableContext,FunctionContext)'. I'll still need to pass these as members of Context to support the 'evaluate' extension function though.
&lt;br&gt;&amp;gt; Another approach to the same concern that I didn't try is to pass in a typed context, eg 'StringContext', 'NodesetContext', etc (think of this as allowing things like perl's 'wantarray()'. That approach would make it easier to expand the number of supported types (eg for xpath2) in future, I'll try it once the tests pass.
&lt;br&gt;&amp;gt; - moved all the functions to a single utility class
&lt;br&gt;&amp;gt; public class Functions {
&lt;br&gt;&amp;gt; String substring(String s, double start, double end);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this makes it easier to unit test the xpath functions, since they are mostly context-independent. Functions that need a navigator get it passed as the first arg, functions that optionally use the context node instead of an argument have that function added as a method of Context. Incidentally I changed some of the unit tests to get mine to pass - in particular I changed the substring() tests back to match the spec (they don't currently).
&lt;br&gt;&amp;gt; No function in my version returns null. (compare to eg the name, namespaceuri functions of Navigator). The xpath spec uses &amp;quot;&amp;quot; or an empty nodeset throughout, so do I, this gets rid of a lot of == null checks. 
&lt;br&gt;&amp;gt; Some of the bugs against the current version of jaxen are fixed by this code - eg the use of double throughout allows gt/lt comparisons of longs (bug jaxen-28), + both of the bugs I filed previously.
&lt;br&gt;&amp;gt; I'd estimate I can finish this in the next week.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Updated%3A-%28JAXEN-31%29-if-jaxen-stopped-using-lists-it-would-be-37x-faster-tp25957242p25957242.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25929064</id>
	<title>[jira] Updated: (JAXEN-31) if jaxen stopped using lists it would be 37x faster</title>
	<published>2009-10-16T10:16:35Z</published>
	<updated>2009-10-16T10:16:35Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Aleksander Adamowski updated JAXEN-31:
&lt;br&gt;--------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: Brian_Ewins_JAXEN-31_perf.patch
&lt;br&gt;&lt;br&gt;I've contacted Brian and he has prepared a cleaned up version of the patch with minimized differences (now it's only 30 kb).
&lt;br&gt;&lt;br&gt;I'll be working on it, but just in case I'm attaching it here.
&lt;br&gt;&lt;br&gt;The patch shouldn't break API compatibility (modulo some issues left to iron out) and Brian has just recently fixed some issues with it:
&lt;br&gt;* off-by-one error in PredicateSet
&lt;br&gt;* sort and reverse support in DefaultLocationPath
&lt;br&gt;&lt;br&gt;Additional notes from Brian:
&lt;br&gt;&lt;br&gt;&amp;quot;In one case I just added an ArrayList wrapper which is a bit wasteful, to make the sort work I implemented a load more methods in LazyList
&lt;br&gt;&lt;br&gt;the tests that are failing are: testUnboundNamespaceUsedInXPathExpression - this is likely to be because the test no longer triggers. There is code in BaseXpath now that unwraps some JaxenRuntimeExceptions, which was actually supposed to catch this test. Not sure why its not firing now. However, this test is only failing on illegal xpaths anyway - not a high priority
&lt;br&gt;&lt;br&gt;testPrecedingAxisInDocumentOrder - this one should have been fixed by the sort() mentioned above.
&lt;br&gt;&lt;br&gt;testIdentitySetUsageInDefaultNameStep - seems to be some issue with the way I'm uniquing the nodes after finding them. (there is a uniqueness check, but obviously its not working)
&lt;br&gt;&lt;br&gt;testAncestorAxis, testPrecedingSiblingAxisIsInDocumentOrder,testPrecedingAxisIsInDocumentOrder,testAncestorOrSelfAxis - all to do with the sort order of nodes.
&lt;br&gt;&lt;br&gt;I think the rest of the 21 are all dupes of these
&lt;br&gt;&lt;br&gt;The kind of thing that is supposed to be much faster with this, btw, is doing things like boolean(//x) - which tests for the existence of a node in the entire tree. Since this just involves forward axes, the lazy-list version will stop when it hits the first matching node, rather than continuing to accumulate node-sets. There's some overhead, reverse-axis tests may be slower, count() and the like which require collection of all nodes are likely to be unaffected.&amp;quot;
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; if jaxen stopped using lists it would be 37x faster
&lt;br&gt;&amp;gt; ---------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-31
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Brian Ewins
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 2.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: Brian_Ewins_JAXEN-31_perf.patch, jaxen.zip, stuff.tgz
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; Original Estimate: 1 week
&lt;br&gt;&amp;gt; &amp;nbsp;Remaining Estimate: 1 week
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The short story - I've rewritten jaxen to use a nodeset abstraction instead of a list to accumulate results. With the unit tests at nearly 100%, the performance test on dom4j runs in ~200ms on my 1GHz powerbook, compared to ~7400ms for the nightly jaxen build. The failing unit tests are for paths not covered in the performance test.
&lt;br&gt;&amp;gt; The long story - I wrote an implementation of the draft ISO Schematron spec on top of Jaxen, instead of the more usual XSLT. The schematron spec is designed so this can be done, mainly for performance reasons. Once I had enough working I was able to compare jaxen with xalan on the 'screamatron' torture test, which is using schematron to validate the schematron 1.5 spec. I was suprised to find that jaxen was about 2x /slower/ than xalan, and marginally slower with a jdom navigator than a dom4j navigator. Looking at why it was so slow, it became clear that the problem was that throughout jaxen it's building lists of intermediate results to filter down, instead of generating the 'next' result on demand. There's comments about this in several places in the code, but the list thing is so ingrained it needs more than a little refactoring to fix. 
&lt;br&gt;&amp;gt; I decided to have a go. This change produces apis incompatible with previous versions of jaxen, so this will be a lump of code not a wee patch. I've basically cloned jaxen to 'org.jaxen2' to work on it. I'm nearly done with the changes, failing tests for the non-xpath extension functions which I havent implemented yet, patterns (not touched at all yet), and a couple of minor bugs.
&lt;br&gt;&amp;gt; I'll post the code on jira once I'm done, but here's the gist of the changes I made:
&lt;br&gt;&amp;gt; - Introduce a Nodeset abstraction instead of a list...
&lt;br&gt;&amp;gt; public interface extends Iterator {
&lt;br&gt;&amp;gt; Object current();
&lt;br&gt;&amp;gt; int position();
&lt;br&gt;&amp;gt; // use of last() replaces the internal iterator with an iterator over a list caching results.
&lt;br&gt;&amp;gt; // it's basically a fallback on what jaxen used to do.
&lt;br&gt;&amp;gt; int last();
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; the reason for this is obvious, eg you can just test 'hasNext()' to check the boolean value of a nodeset.
&lt;br&gt;&amp;gt; - change the signature of Expr to allow the selection of a fast code path
&lt;br&gt;&amp;gt; public interface Expr {
&lt;br&gt;&amp;gt; // these require context because of variable/function refs only. see later.
&lt;br&gt;&amp;gt; boolean isBoolean(Context ctx);
&lt;br&gt;&amp;gt; boolean isNumber(Context ctx);
&lt;br&gt;&amp;gt; boolean isString(Context ctx);
&lt;br&gt;&amp;gt; boolean isNodeset(Context ctx);
&lt;br&gt;&amp;gt; boolean booleanValue(Context ctx);
&lt;br&gt;&amp;gt; double numberValue(Context ctx);
&lt;br&gt;&amp;gt; String stringValue(Context ctx);
&lt;br&gt;&amp;gt; Nodeset nodesetValue(Context ctx);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this is really for my own sanity as there's so much code to maintain. Throughout jaxen, everything is untyped, so its fairly easy to (eg) pass a nodeSet when you meant to pass a node; there's instanceof checks, == null checks, and casts everywhere to deal with this. &amp;nbsp;Once you put everything behind an interface like the one above, making objects responsible for their own casts, a lot of the code is simplified, eg addition is just expr1.numberValue(ctx) + expr2.numberValue(ctx). All but a couple of classes inherit from abstract base classes that implement all but one of those methods (eg StringExprBase leaves stringValue() abstract.) &amp;nbsp;
&lt;br&gt;&amp;gt; Variable/Function refs don't have a type without context in my version, &amp;nbsp;and like Jaxen I look up functions, variables every time. This isn't smart - in xpath we can resolve all variable, function refs beforehand, and get faster code as a result. I'll probably change things so I have 'bound' and 'unbound' exprs, add 'BoundExpr bind(VariableContext,FunctionContext)'. I'll still need to pass these as members of Context to support the 'evaluate' extension function though.
&lt;br&gt;&amp;gt; Another approach to the same concern that I didn't try is to pass in a typed context, eg 'StringContext', 'NodesetContext', etc (think of this as allowing things like perl's 'wantarray()'. That approach would make it easier to expand the number of supported types (eg for xpath2) in future, I'll try it once the tests pass.
&lt;br&gt;&amp;gt; - moved all the functions to a single utility class
&lt;br&gt;&amp;gt; public class Functions {
&lt;br&gt;&amp;gt; String substring(String s, double start, double end);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this makes it easier to unit test the xpath functions, since they are mostly context-independent. Functions that need a navigator get it passed as the first arg, functions that optionally use the context node instead of an argument have that function added as a method of Context. Incidentally I changed some of the unit tests to get mine to pass - in particular I changed the substring() tests back to match the spec (they don't currently).
&lt;br&gt;&amp;gt; No function in my version returns null. (compare to eg the name, namespaceuri functions of Navigator). The xpath spec uses &amp;quot;&amp;quot; or an empty nodeset throughout, so do I, this gets rid of a lot of == null checks. 
&lt;br&gt;&amp;gt; Some of the bugs against the current version of jaxen are fixed by this code - eg the use of double throughout allows gt/lt comparisons of longs (bug jaxen-28), + both of the bugs I filed previously.
&lt;br&gt;&amp;gt; I'd estimate I can finish this in the next week.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Updated%3A-%28JAXEN-31%29-if-jaxen-stopped-using-lists-it-would-be-37x-faster-tp25929064p25929064.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25912102</id>
	<title>[jira] Commented: (JAXEN-205) Accidental subtree copy on the SVN trunk?</title>
	<published>2009-10-15T09:45:26Z</published>
	<updated>2009-10-15T09:45:26Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-205?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=194880#action_194880&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-205?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=194880#action_194880&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Brian Ewins commented on JAXEN-205:
&lt;br&gt;-----------------------------------
&lt;br&gt;&lt;br&gt;Looks like this happened accidentally in the creation of &amp;nbsp;r1340 &amp;quot;V1_1_2_Final&amp;quot;. I checked and there's no differences between the extra 'jaxen' folder and its parent (other than the extra jaxen folder of course). So it can be safely deleted.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Accidental subtree copy on the SVN trunk?
&lt;br&gt;&amp;gt; -----------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-205
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-205&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-205&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Task
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Build
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Aleksander Adamowski
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; In the SVN repository, one can see that the Jaxen sources are duplicated inside themselves on the trunk:
&lt;br&gt;&amp;gt; &lt;a href=&quot;https://svn.codehaus.org/jaxen/trunk/jaxen/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://svn.codehaus.org/jaxen/trunk/jaxen/&lt;/a&gt;&lt;br&gt;&amp;gt; &lt;a href=&quot;https://svn.codehaus.org/jaxen/trunk/jaxen/jaxen/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://svn.codehaus.org/jaxen/trunk/jaxen/jaxen/&lt;/a&gt;&lt;br&gt;&amp;gt; This doesn't look like an intentional SVN branch and doesn't seem to make any sense.
&lt;br&gt;&amp;gt; If they are indeed accidental, I suggest deleting them as they make diffs between tags/branches and the trunk very cumbersome (not to speak about GIT repositories of other developers).
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-205%29-Accidental-subtree-copy-on-the-SVN-trunk--tp25906638p25912102.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25906638</id>
	<title>[jira] Created: (JAXEN-205) Accidental subtree copy on the SVN trunk?</title>
	<published>2009-10-15T04:00:26Z</published>
	<updated>2009-10-15T04:00:26Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">Accidental subtree copy on the SVN trunk?
&lt;br&gt;-----------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Key: JAXEN-205
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-205&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-205&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Project: jaxen
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Issue Type: Task
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Components: Build
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Reporter: Aleksander Adamowski
&lt;br&gt;&lt;br&gt;&lt;br&gt;In the SVN repository, one can see that the Jaxen sources are duplicated inside themselves on the trunk:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;https://svn.codehaus.org/jaxen/trunk/jaxen/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://svn.codehaus.org/jaxen/trunk/jaxen/&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;https://svn.codehaus.org/jaxen/trunk/jaxen/jaxen/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://svn.codehaus.org/jaxen/trunk/jaxen/jaxen/&lt;/a&gt;&lt;br&gt;&lt;br&gt;This doesn't look like an intentional SVN branch and doesn't seem to make any sense.
&lt;br&gt;&lt;br&gt;If they are indeed accidental, I suggest deleting them as they make diffs between tags/branches and the trunk very cumbersome (not to speak about GIT repositories of other developers).
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-205%29-Accidental-subtree-copy-on-the-SVN-trunk--tp25906638p25906638.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25906487</id>
	<title>[jira] Commented: (JAXEN-149) Upgrade to Maven 2</title>
	<published>2009-10-15T03:47:26Z</published>
	<updated>2009-10-15T03:47:26Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-149?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=194837#action_194837&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-149?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=194837#action_194837&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Aleksander Adamowski commented on JAXEN-149:
&lt;br&gt;--------------------------------------------
&lt;br&gt;&lt;br&gt;Notes about the supplied pom.xml:
&lt;br&gt;&lt;br&gt;1) I've changed the project version to 1.1.3-SNAPSHOT.
&lt;br&gt;Non-snapshots version numbers should be only reserved for stable teleases (they should only occur on branches and tags in SVN, never in trunk).
&lt;br&gt;&lt;br&gt;2) Relevant dependency numbers, which were too old for the build to succeed, were corrected (these were: maven-cobertura-plugin, maven-findbugs-plugin)
&lt;br&gt;&lt;br&gt;3) All the unit tests seem to run fine:
&lt;br&gt;&lt;br&gt;Results :
&lt;br&gt;&lt;br&gt;Tests run: 694, Failures: 0, Errors: 0, Skipped: 0
&lt;br&gt;&lt;br&gt;[INFO] [jar:jar]
&lt;br&gt;[INFO] Building jar: c:\projekty\3rdparty\jaxen\jaxen-SVN\target\jaxen-1.1.3-SNAPSHOT.jar
&lt;br&gt;[INFO] [install:install]
&lt;br&gt;[INFO] Installing c:\projekty\3rdparty\jaxen\jaxen-SVN\target\jaxen-1.1.3-SNAPSHOT.jar to C:\Documents and Settings\aadamowski\.m2\repository\jaxen\jaxen\1.1.3-SNAPSHOT\jaxen-1.1.3-SNAPSHOT.jar
&lt;br&gt;[INFO] ------------------------------------------------------------------------
&lt;br&gt;[INFO] BUILD SUCCESSFUL
&lt;br&gt;[INFO] ------------------------------------------------------------------------
&lt;br&gt;[INFO] Total time: 7 seconds
&lt;br&gt;[INFO] Finished at: Thu Oct 15 12:45:58 CEST 2009
&lt;br&gt;[INFO] Final Memory: 29M/254M
&lt;br&gt;[INFO] ------------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Upgrade to Maven 2
&lt;br&gt;&amp;gt; ------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-149
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-149&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-149&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Task
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Build
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Elliotte Rusty Harold
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 1.1.3
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: jaxen-maven2-upgrade.patch, pom.xml
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; One of these days we should move forward to Maven 2, but not for Jaxen 1.1. 
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-149%29-Upgrade-to-Maven-2-tp5150339p25906487.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25906424</id>
	<title>[jira] Commented: (JAXEN-149) Upgrade to Maven 2</title>
	<published>2009-10-15T03:42:26Z</published>
	<updated>2009-10-15T03:42:26Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-149?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=194834#action_194834&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-149?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=194834#action_194834&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Aleksander Adamowski commented on JAXEN-149:
&lt;br&gt;--------------------------------------------
&lt;br&gt;&lt;br&gt;I gave a shot at doing it automatically using maven-one-plugin:
&lt;br&gt;&lt;br&gt;mvn one:convert
&lt;br&gt;&lt;br&gt;The result is mostly OK, but some dependencies need to have their version numbers updated. The unit tests run all OK.
&lt;br&gt;&lt;br&gt;Attaching patch (which only covers the new pom.xml) and the raw pom.xml itself.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Upgrade to Maven 2
&lt;br&gt;&amp;gt; ------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-149
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-149&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-149&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Task
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Build
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Elliotte Rusty Harold
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 1.1.3
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: jaxen-maven2-upgrade.patch, pom.xml
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; One of these days we should move forward to Maven 2, but not for Jaxen 1.1. 
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-149%29-Upgrade-to-Maven-2-tp5150339p25906424.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25906428</id>
	<title>[jira] Updated: (JAXEN-149) Upgrade to Maven 2</title>
	<published>2009-10-15T03:42:26Z</published>
	<updated>2009-10-15T03:42:26Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-149?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-149?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Aleksander Adamowski updated JAXEN-149:
&lt;br&gt;---------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: jaxen-maven2-upgrade.patch
&lt;br&gt;&lt;br&gt;The patch.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Upgrade to Maven 2
&lt;br&gt;&amp;gt; ------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-149
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-149&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-149&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Task
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Build
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Elliotte Rusty Harold
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 1.1.3
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: jaxen-maven2-upgrade.patch, pom.xml
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; One of these days we should move forward to Maven 2, but not for Jaxen 1.1. 
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-149%29-Upgrade-to-Maven-2-tp5150339p25906428.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25906430</id>
	<title>[jira] Updated: (JAXEN-149) Upgrade to Maven 2</title>
	<published>2009-10-15T03:42:26Z</published>
	<updated>2009-10-15T03:42:26Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-149?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-149?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Aleksander Adamowski updated JAXEN-149:
&lt;br&gt;---------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: pom.xml
&lt;br&gt;&lt;br&gt;The pom.xml
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Upgrade to Maven 2
&lt;br&gt;&amp;gt; ------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-149
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-149&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-149&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Task
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Build
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Elliotte Rusty Harold
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 1.1.3
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: jaxen-maven2-upgrade.patch, pom.xml
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; One of these days we should move forward to Maven 2, but not for Jaxen 1.1. 
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-149%29-Upgrade-to-Maven-2-tp5150339p25906430.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25889030</id>
	<title>[jira] Commented: (JAXEN-204) Project infrastructure: fix Mailman mailing lists</title>
	<published>2009-10-14T04:03:28Z</published>
	<updated>2009-10-14T04:03:28Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-204?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=194674#action_194674&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-204?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=194674#action_194674&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Elliotte Rusty Harold commented on JAXEN-204:
&lt;br&gt;---------------------------------------------
&lt;br&gt;&lt;br&gt;Weird since that's still a codehaus.org URL. Anyone know how to fix this? Should we escalate to codehaus? Bob?
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Project infrastructure: fix Mailman mailing lists
&lt;br&gt;&amp;gt; -------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-204
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-204&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-204&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Task
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Aleksander Adamowski
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; There are some problems with the project mailing lists:
&lt;br&gt;&amp;gt; 1) Links to mailing list archives (&lt;a href=&quot;http://jaxen.org/mail-lists.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jaxen.org/mail-lists.html&lt;/a&gt;) are dead - they lead to an expired domain (archive.jaxen.codehaus.org), so the user ends up on an ad-ridden domain auction page
&lt;br&gt;&amp;gt; 2) Mail sent to the lists bounces:
&lt;br&gt;&amp;gt; &amp;nbsp;I've subscribed to the mailing list and received a confirmation, but after that my posts get rejected because &amp;quot;only subscribers may post&amp;quot;:
&lt;br&gt;&amp;gt; ===============
&lt;br&gt;&amp;gt; Date: Mon, 12 Oct 2009 05:48:06 -0500
&lt;br&gt;&amp;gt; From: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xircles@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Reply-To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-owner@...&lt;/a&gt;
&lt;br&gt;&amp;gt; To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aleksander.adamowski@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Message-Id: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;4ad30966cd6f0_66024af0b5a8c4@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; Subject: [Codehaus] Subscription confirmation for &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Mime-Version: 1.0
&lt;br&gt;&amp;gt; Content-Type: multipart/alternative;
&lt;br&gt;&amp;gt; boundary=mimepart_4ad30966cf2c5_66024af0b5a9f6
&lt;br&gt;&amp;gt; --mimepart_4ad30966cf2c5_66024af0b5a9f6
&lt;br&gt;&amp;gt; Content-Type: text/plain; charset=utf-8
&lt;br&gt;&amp;gt; Content-Transfer-Encoding: Quoted-printable
&lt;br&gt;&amp;gt; Content-Disposition: inline
&lt;br&gt;&amp;gt; Hello &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aleksander.adamowski@...&lt;/a&gt;
&lt;br&gt;&amp;gt; You have successfully subscribed to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt; using this ema=
&lt;br&gt;&amp;gt; il address.
&lt;br&gt;&amp;gt; Thanks,
&lt;br&gt;&amp;gt; Codehaus Support
&lt;br&gt;&amp;gt; Here's a later message that bounced:
&lt;br&gt;&amp;gt; ===============
&lt;br&gt;&amp;gt; Message-Id: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;4ad31c2e.9115f10a.4222.6654SMTPIN_ADDED@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; Received: (qmail 9502 invoked for bounce); 12 Oct 2009 12:08:10 -0000
&lt;br&gt;&amp;gt; Date: 12 Oct 2009 12:08:10 -0000
&lt;br&gt;&amp;gt; From: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MAILER-DAEMON@...&lt;/a&gt;
&lt;br&gt;&amp;gt; To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aleksander.adamowski@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Subject: failure notice
&lt;br&gt;&amp;gt; Hi. This is the qmail-send program at mail.codehaus.org.
&lt;br&gt;&amp;gt; I'm afraid I wasn't able to deliver your message to the following addresses.
&lt;br&gt;&amp;gt; This is a permanent error; I've given up. Sorry it didn't work out.
&lt;br&gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; Sorry, only subscribers may post. If you are a subscriber, please
&lt;br&gt;&amp;gt; forward this message to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-owner@...&lt;/a&gt; to get your new
&lt;br&gt;&amp;gt; address included. (#5.7.2)
&lt;br&gt;&amp;gt; --- Below this line is a copy of the message.
&lt;br&gt;&amp;gt; Return-Path: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aleksander.adamowski@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; Received: (qmail 9434 invoked by uid 89); 12 Oct 2009 12:08:03 -0000
&lt;br&gt;&amp;gt; Received: from unknown (HELO mail-yw0-f198.google.com) (209.85.211.198)
&lt;br&gt;&amp;gt; &amp;nbsp;by mail.codehaus.org with SMTP; 12 Oct 2009 12:08:03 -0000
&lt;br&gt;&amp;gt; Received: by ywh36 with SMTP id 36so9185363ywh.15
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;&amp;gt;; Mon, 12 Oct 2009 05:08:05 -0700 (PDT)
&lt;br&gt;&amp;gt; MIME-Version: 1.0
&lt;br&gt;&amp;gt; Received: by 10.91.160.25 with SMTP id m25mr1593245ago.91.1255349285198; Mon,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;12 Oct 2009 05:08:05 -0700 (PDT)
&lt;br&gt;&amp;gt; From: Aleksander Adamowski &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=14&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aleksander.adamowski@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; Date: Mon, 12 Oct 2009 14:07:45 +0200
&lt;br&gt;&amp;gt; Message-ID: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=15&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;1c690d740910120507v5317970ieaf2a7703a1ef2f6@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; Subject: Jaxen project maintenance/development?
&lt;br&gt;&amp;gt; To: Jaxen Developers List &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25889030&amp;i=16&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; Content-Type: text/plain; charset=UTF-8
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-204%29-Project-infrastructure%3A-fix-Mailman-mailing-lists-tp25876285p25889030.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25876285</id>
	<title>[jira] Created: (JAXEN-204) Project infrastructure: fix Mailman mailing lists</title>
	<published>2009-10-13T09:27:26Z</published>
	<updated>2009-10-13T09:27:26Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">Project infrastructure: fix Mailman mailing lists
&lt;br&gt;-------------------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Key: JAXEN-204
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-204&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-204&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Project: jaxen
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Issue Type: Task
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Reporter: Aleksander Adamowski
&lt;br&gt;&lt;br&gt;&lt;br&gt;There are some problems with the project mailing lists:
&lt;br&gt;&lt;br&gt;1) Links to mailing list archives (&lt;a href=&quot;http://jaxen.org/mail-lists.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jaxen.org/mail-lists.html&lt;/a&gt;) are dead - they lead to an expired domain (archive.jaxen.codehaus.org), so the user ends up on an ad-ridden domain auction page
&lt;br&gt;2) Mail sent to the lists bounces:
&lt;br&gt;&lt;br&gt;&amp;nbsp;I've subscribed to the mailing list and received a confirmation, but after that my posts get rejected because &amp;quot;only subscribers may post&amp;quot;:
&lt;br&gt;&lt;br&gt;===============
&lt;br&gt;Date: Mon, 12 Oct 2009 05:48:06 -0500
&lt;br&gt;From: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xircles@...&lt;/a&gt;
&lt;br&gt;Reply-To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-owner@...&lt;/a&gt;
&lt;br&gt;To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aleksander.adamowski@...&lt;/a&gt;
&lt;br&gt;Message-Id: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;4ad30966cd6f0_66024af0b5a8c4@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Subject: [Codehaus] Subscription confirmation for &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;Mime-Version: 1.0
&lt;br&gt;Content-Type: multipart/alternative;
&lt;br&gt;boundary=mimepart_4ad30966cf2c5_66024af0b5a9f6
&lt;br&gt;&lt;br&gt;&lt;br&gt;--mimepart_4ad30966cf2c5_66024af0b5a9f6
&lt;br&gt;Content-Type: text/plain; charset=utf-8
&lt;br&gt;Content-Transfer-Encoding: Quoted-printable
&lt;br&gt;Content-Disposition: inline
&lt;br&gt;&lt;br&gt;&lt;br&gt;Hello &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aleksander.adamowski@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;You have successfully subscribed to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt; using this ema=
&lt;br&gt;il address.
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;&lt;br&gt;Codehaus Support
&lt;br&gt;&lt;br&gt;&lt;br&gt;Here's a later message that bounced:
&lt;br&gt;===============
&lt;br&gt;Message-Id: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;4ad31c2e.9115f10a.4222.6654SMTPIN_ADDED@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Received: (qmail 9502 invoked for bounce); 12 Oct 2009 12:08:10 -0000
&lt;br&gt;Date: 12 Oct 2009 12:08:10 -0000
&lt;br&gt;From: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MAILER-DAEMON@...&lt;/a&gt;
&lt;br&gt;To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aleksander.adamowski@...&lt;/a&gt;
&lt;br&gt;Subject: failure notice
&lt;br&gt;&lt;br&gt;Hi. This is the qmail-send program at mail.codehaus.org.
&lt;br&gt;I'm afraid I wasn't able to deliver your message to the following addresses.
&lt;br&gt;This is a permanent error; I've given up. Sorry it didn't work out.
&lt;br&gt;&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;Sorry, only subscribers may post. If you are a subscriber, please
&lt;br&gt;forward this message to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-owner@...&lt;/a&gt; to get your new
&lt;br&gt;address included. (#5.7.2)
&lt;br&gt;&lt;br&gt;--- Below this line is a copy of the message.
&lt;br&gt;&lt;br&gt;Return-Path: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aleksander.adamowski@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Received: (qmail 9434 invoked by uid 89); 12 Oct 2009 12:08:03 -0000
&lt;br&gt;Received: from unknown (HELO mail-yw0-f198.google.com) (209.85.211.198)
&lt;br&gt;&amp;nbsp;by mail.codehaus.org with SMTP; 12 Oct 2009 12:08:03 -0000
&lt;br&gt;Received: by ywh36 with SMTP id 36so9185363ywh.15
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;&amp;gt;; Mon, 12 Oct 2009 05:08:05 -0700 (PDT)
&lt;br&gt;MIME-Version: 1.0
&lt;br&gt;Received: by 10.91.160.25 with SMTP id m25mr1593245ago.91.1255349285198; Mon,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;12 Oct 2009 05:08:05 -0700 (PDT)
&lt;br&gt;From: Aleksander Adamowski &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=14&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aleksander.adamowski@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Mon, 12 Oct 2009 14:07:45 +0200
&lt;br&gt;Message-ID: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=15&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;1c690d740910120507v5317970ieaf2a7703a1ef2f6@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Subject: Jaxen project maintenance/development?
&lt;br&gt;To: Jaxen Developers List &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25876285&amp;i=16&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Content-Type: text/plain; charset=UTF-8
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28JAXEN-204%29-Project-infrastructure%3A-fix-Mailman-mailing-lists-tp25876285p25876285.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25855647</id>
	<title>[jira] Commented: (JAXEN-31) if jaxen stopped using lists it would be 37x faster</title>
	<published>2009-10-12T06:17:27Z</published>
	<updated>2009-10-12T06:17:27Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=194400#action_194400&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=194400#action_194400&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Aleksander Adamowski commented on JAXEN-31:
&lt;br&gt;-------------------------------------------
&lt;br&gt;&lt;br&gt;OK, I've dug out some old posts on jaxen-user made by Brian in Nov 2004:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://markmail.org/message/fhl327jznaxw3fbp&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://markmail.org/message/fhl327jznaxw3fbp&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://markmail.org/message/c226vid7yaoofdfm&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://markmail.org/message/c226vid7yaoofdfm&lt;/a&gt;&lt;br&gt;&lt;br&gt;They sort of lay out the proposed course of action WRT optimizing Jaxen.
&lt;br&gt;&lt;br&gt;Do you agree with assertions presented there?
&lt;br&gt;&lt;br&gt;As I understand, none of this has happened and 1.1.1 and 1.1.2 releases were made in the mean time.
&lt;br&gt;Do those plans need to be revised, then? Or are they more or less still correct?
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; if jaxen stopped using lists it would be 37x faster
&lt;br&gt;&amp;gt; ---------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-31
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Brian Ewins
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 2.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: jaxen.zip, stuff.tgz
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; Original Estimate: 1 week
&lt;br&gt;&amp;gt; &amp;nbsp;Remaining Estimate: 1 week
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The short story - I've rewritten jaxen to use a nodeset abstraction instead of a list to accumulate results. With the unit tests at nearly 100%, the performance test on dom4j runs in ~200ms on my 1GHz powerbook, compared to ~7400ms for the nightly jaxen build. The failing unit tests are for paths not covered in the performance test.
&lt;br&gt;&amp;gt; The long story - I wrote an implementation of the draft ISO Schematron spec on top of Jaxen, instead of the more usual XSLT. The schematron spec is designed so this can be done, mainly for performance reasons. Once I had enough working I was able to compare jaxen with xalan on the 'screamatron' torture test, which is using schematron to validate the schematron 1.5 spec. I was suprised to find that jaxen was about 2x /slower/ than xalan, and marginally slower with a jdom navigator than a dom4j navigator. Looking at why it was so slow, it became clear that the problem was that throughout jaxen it's building lists of intermediate results to filter down, instead of generating the 'next' result on demand. There's comments about this in several places in the code, but the list thing is so ingrained it needs more than a little refactoring to fix. 
&lt;br&gt;&amp;gt; I decided to have a go. This change produces apis incompatible with previous versions of jaxen, so this will be a lump of code not a wee patch. I've basically cloned jaxen to 'org.jaxen2' to work on it. I'm nearly done with the changes, failing tests for the non-xpath extension functions which I havent implemented yet, patterns (not touched at all yet), and a couple of minor bugs.
&lt;br&gt;&amp;gt; I'll post the code on jira once I'm done, but here's the gist of the changes I made:
&lt;br&gt;&amp;gt; - Introduce a Nodeset abstraction instead of a list...
&lt;br&gt;&amp;gt; public interface extends Iterator {
&lt;br&gt;&amp;gt; Object current();
&lt;br&gt;&amp;gt; int position();
&lt;br&gt;&amp;gt; // use of last() replaces the internal iterator with an iterator over a list caching results.
&lt;br&gt;&amp;gt; // it's basically a fallback on what jaxen used to do.
&lt;br&gt;&amp;gt; int last();
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; the reason for this is obvious, eg you can just test 'hasNext()' to check the boolean value of a nodeset.
&lt;br&gt;&amp;gt; - change the signature of Expr to allow the selection of a fast code path
&lt;br&gt;&amp;gt; public interface Expr {
&lt;br&gt;&amp;gt; // these require context because of variable/function refs only. see later.
&lt;br&gt;&amp;gt; boolean isBoolean(Context ctx);
&lt;br&gt;&amp;gt; boolean isNumber(Context ctx);
&lt;br&gt;&amp;gt; boolean isString(Context ctx);
&lt;br&gt;&amp;gt; boolean isNodeset(Context ctx);
&lt;br&gt;&amp;gt; boolean booleanValue(Context ctx);
&lt;br&gt;&amp;gt; double numberValue(Context ctx);
&lt;br&gt;&amp;gt; String stringValue(Context ctx);
&lt;br&gt;&amp;gt; Nodeset nodesetValue(Context ctx);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this is really for my own sanity as there's so much code to maintain. Throughout jaxen, everything is untyped, so its fairly easy to (eg) pass a nodeSet when you meant to pass a node; there's instanceof checks, == null checks, and casts everywhere to deal with this. &amp;nbsp;Once you put everything behind an interface like the one above, making objects responsible for their own casts, a lot of the code is simplified, eg addition is just expr1.numberValue(ctx) + expr2.numberValue(ctx). All but a couple of classes inherit from abstract base classes that implement all but one of those methods (eg StringExprBase leaves stringValue() abstract.) &amp;nbsp;
&lt;br&gt;&amp;gt; Variable/Function refs don't have a type without context in my version, &amp;nbsp;and like Jaxen I look up functions, variables every time. This isn't smart - in xpath we can resolve all variable, function refs beforehand, and get faster code as a result. I'll probably change things so I have 'bound' and 'unbound' exprs, add 'BoundExpr bind(VariableContext,FunctionContext)'. I'll still need to pass these as members of Context to support the 'evaluate' extension function though.
&lt;br&gt;&amp;gt; Another approach to the same concern that I didn't try is to pass in a typed context, eg 'StringContext', 'NodesetContext', etc (think of this as allowing things like perl's 'wantarray()'. That approach would make it easier to expand the number of supported types (eg for xpath2) in future, I'll try it once the tests pass.
&lt;br&gt;&amp;gt; - moved all the functions to a single utility class
&lt;br&gt;&amp;gt; public class Functions {
&lt;br&gt;&amp;gt; String substring(String s, double start, double end);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this makes it easier to unit test the xpath functions, since they are mostly context-independent. Functions that need a navigator get it passed as the first arg, functions that optionally use the context node instead of an argument have that function added as a method of Context. Incidentally I changed some of the unit tests to get mine to pass - in particular I changed the substring() tests back to match the spec (they don't currently).
&lt;br&gt;&amp;gt; No function in my version returns null. (compare to eg the name, namespaceuri functions of Navigator). The xpath spec uses &amp;quot;&amp;quot; or an empty nodeset throughout, so do I, this gets rid of a lot of == null checks. 
&lt;br&gt;&amp;gt; Some of the bugs against the current version of jaxen are fixed by this code - eg the use of double throughout allows gt/lt comparisons of longs (bug jaxen-28), + both of the bugs I filed previously.
&lt;br&gt;&amp;gt; I'd estimate I can finish this in the next week.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Commented%3A-%28JAXEN-31%29-if-jaxen-stopped-using-lists-it-would-be-37x-faster-tp25855647p25855647.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25854643</id>
	<title>[jira] Commented: (JAXEN-31) if jaxen stopped using lists it would be 37x faster</title>
	<published>2009-10-12T05:04:26Z</published>
	<updated>2009-10-12T05:04:26Z</updated>
	<author>
		<name>JIRA jira@codehaus.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=194390#action_194390&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=194390#action_194390&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Elliotte Rusty Harold commented on JAXEN-31:
&lt;br&gt;--------------------------------------------
&lt;br&gt;&lt;br&gt;FYI, the tests you cite were run with Jaxen 1.0. This is years out of date. Since then, a lot of work has gone into both conformance and optimization so we likely do better now. I'd be curious to see updated results.
&lt;br&gt;&lt;br&gt;That said, the optimization suggested here may still be a good idea. As far as API compatibility, just make sure you don't change any existing public or protected class or method signatures, and you should be good. And of course the unti tests should all pass too. 
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; if jaxen stopped using lists it would be 37x faster
&lt;br&gt;&amp;gt; ---------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: JAXEN-31
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://jira.codehaus.org/browse/JAXEN-31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/browse/JAXEN-31&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: jaxen
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.0
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Brian Ewins
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 2.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: jaxen.zip, stuff.tgz
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; Original Estimate: 1 week
&lt;br&gt;&amp;gt; &amp;nbsp;Remaining Estimate: 1 week
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The short story - I've rewritten jaxen to use a nodeset abstraction instead of a list to accumulate results. With the unit tests at nearly 100%, the performance test on dom4j runs in ~200ms on my 1GHz powerbook, compared to ~7400ms for the nightly jaxen build. The failing unit tests are for paths not covered in the performance test.
&lt;br&gt;&amp;gt; The long story - I wrote an implementation of the draft ISO Schematron spec on top of Jaxen, instead of the more usual XSLT. The schematron spec is designed so this can be done, mainly for performance reasons. Once I had enough working I was able to compare jaxen with xalan on the 'screamatron' torture test, which is using schematron to validate the schematron 1.5 spec. I was suprised to find that jaxen was about 2x /slower/ than xalan, and marginally slower with a jdom navigator than a dom4j navigator. Looking at why it was so slow, it became clear that the problem was that throughout jaxen it's building lists of intermediate results to filter down, instead of generating the 'next' result on demand. There's comments about this in several places in the code, but the list thing is so ingrained it needs more than a little refactoring to fix. 
&lt;br&gt;&amp;gt; I decided to have a go. This change produces apis incompatible with previous versions of jaxen, so this will be a lump of code not a wee patch. I've basically cloned jaxen to 'org.jaxen2' to work on it. I'm nearly done with the changes, failing tests for the non-xpath extension functions which I havent implemented yet, patterns (not touched at all yet), and a couple of minor bugs.
&lt;br&gt;&amp;gt; I'll post the code on jira once I'm done, but here's the gist of the changes I made:
&lt;br&gt;&amp;gt; - Introduce a Nodeset abstraction instead of a list...
&lt;br&gt;&amp;gt; public interface extends Iterator {
&lt;br&gt;&amp;gt; Object current();
&lt;br&gt;&amp;gt; int position();
&lt;br&gt;&amp;gt; // use of last() replaces the internal iterator with an iterator over a list caching results.
&lt;br&gt;&amp;gt; // it's basically a fallback on what jaxen used to do.
&lt;br&gt;&amp;gt; int last();
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; the reason for this is obvious, eg you can just test 'hasNext()' to check the boolean value of a nodeset.
&lt;br&gt;&amp;gt; - change the signature of Expr to allow the selection of a fast code path
&lt;br&gt;&amp;gt; public interface Expr {
&lt;br&gt;&amp;gt; // these require context because of variable/function refs only. see later.
&lt;br&gt;&amp;gt; boolean isBoolean(Context ctx);
&lt;br&gt;&amp;gt; boolean isNumber(Context ctx);
&lt;br&gt;&amp;gt; boolean isString(Context ctx);
&lt;br&gt;&amp;gt; boolean isNodeset(Context ctx);
&lt;br&gt;&amp;gt; boolean booleanValue(Context ctx);
&lt;br&gt;&amp;gt; double numberValue(Context ctx);
&lt;br&gt;&amp;gt; String stringValue(Context ctx);
&lt;br&gt;&amp;gt; Nodeset nodesetValue(Context ctx);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this is really for my own sanity as there's so much code to maintain. Throughout jaxen, everything is untyped, so its fairly easy to (eg) pass a nodeSet when you meant to pass a node; there's instanceof checks, == null checks, and casts everywhere to deal with this. &amp;nbsp;Once you put everything behind an interface like the one above, making objects responsible for their own casts, a lot of the code is simplified, eg addition is just expr1.numberValue(ctx) + expr2.numberValue(ctx). All but a couple of classes inherit from abstract base classes that implement all but one of those methods (eg StringExprBase leaves stringValue() abstract.) &amp;nbsp;
&lt;br&gt;&amp;gt; Variable/Function refs don't have a type without context in my version, &amp;nbsp;and like Jaxen I look up functions, variables every time. This isn't smart - in xpath we can resolve all variable, function refs beforehand, and get faster code as a result. I'll probably change things so I have 'bound' and 'unbound' exprs, add 'BoundExpr bind(VariableContext,FunctionContext)'. I'll still need to pass these as members of Context to support the 'evaluate' extension function though.
&lt;br&gt;&amp;gt; Another approach to the same concern that I didn't try is to pass in a typed context, eg 'StringContext', 'NodesetContext', etc (think of this as allowing things like perl's 'wantarray()'. That approach would make it easier to expand the number of supported types (eg for xpath2) in future, I'll try it once the tests pass.
&lt;br&gt;&amp;gt; - moved all the functions to a single utility class
&lt;br&gt;&amp;gt; public class Functions {
&lt;br&gt;&amp;gt; String substring(String s, double start, double end);
&lt;br&gt;&amp;gt; // etc
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; this makes it easier to unit test the xpath functions, since they are mostly context-independent. Functions that need a navigator get it passed as the first arg, functions that optionally use the context node instead of an argument have that function added as a method of Context. Incidentally I changed some of the unit tests to get mine to pass - in particular I changed the substring() tests back to match the spec (they don't currently).
&lt;br&gt;&amp;gt; No function in my version returns null. (compare to eg the name, namespaceuri functions of Navigator). The xpath spec uses &amp;quot;&amp;quot; or an empty nodeset throughout, so do I, this gets rid of a lot of == null checks. 
&lt;br&gt;&amp;gt; Some of the bugs against the current version of jaxen are fixed by this code - eg the use of double throughout allows gt/lt comparisons of longs (bug jaxen-28), + both of the bugs I filed previously.
&lt;br&gt;&amp;gt; I'd estimate I can finish this in the next week.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://jira.codehaus.org/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.codehaus.org/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe from this list, please visit:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://xircles.codehaus.org/manage_email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xircles.codehaus.org/manage_email&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/jaxen---dev-f11893.html&quot; embed=&quot;fixTarget[11893]&quot; target=&quot;_top&quot; &gt;jaxen - dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Commented%3A-%28JAXEN-31%29-if-jaxen-stopped-using-lists-it-would-be-37x-faster-tp25854643p25854643.html" />
</entry>

</feed>
