Details
-
Bug
-
Status: Closed
-
Blocker
-
Resolution: Fixed
-
None
-
None
-
None
-
None
-
OS : Any
Axiom Version 1.2.5
Java Runtime version : 1.5
Description
Given the following xml fragment
<ns1:BOSettings xmlns:ns1="http://a.b.c/pro">
<ns1:ObjectType>X</ns1:ObjectType>
</ns1:BOSettings>
Iterator objectTypeIt = bosettings.getChildrenWithName(helper.createQNameForField("ObjectType"));
invoking
OMElement element = objectTypeIt.next();
throws a ClassCastException
the OMChildrenQNameIterator return the first child which in this case is of type OMText
the issue can be fixed by first calling hasNext and then next, the hasNext method has a side effect which allows the next to proceed correctly.
This behavior does not obey the published Iterator documentation, the following is expected Iterator behavior
Iterator<Integer> it = Arrays.asList(new Integer[]
{ Integer.valueOf(1), Integer.valueOf(2),});
do
{
it.next();
} while(it.hasNext());
will work correctly and is the expected behavior.
Whereas calling it.next on an Iterator instance of type OMChildrenQNameIterator will result in a ClassCastException