Description

An XObject as obtained via XPath.execute returns different results for each call to str, num, nodeset, or bool. This quite similar to XALANJ-1335 but I wish to emphasize calling a different function, and that the result is different.

In this case the result cannot be cached and used later as we wish to use a different result.

For example:

System.out.println( object.str() );
int number = object.num() + 5;

The second line does not work so long as the first line exists. You cannot extract multiple types from the result.

There is nothing to suggest that these functions should have side-effects, nor is it understood why they would.

This type of behaviour is vital in our TestPlan web testing suite which uses dynamic typing. We have no workaround.

edA-qa mort-ora-y
added a comment - 08/Jan/09 10:21 Evidence to this being a defect is an inconsistency in behaviour.
Given a simple XML:
<root><value name='one'>12</value></root>
And this XPath:
//value [@name='one']
object.str() returns "12" the first time, and empty strings subsequence calls
But if you use this XPath:
string(//value [@name='one'] )
object.str(), object.num() all return the correct results any number of times they are called
Indeed it also works with the number() xpath function.
The fact the the NodeSet implementation iterates over the nodes just appears wrong – there is no reason it should.