Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
1.3
-
None
Description
The following code throws a "java.lang.NegativeArraySizeException":
LazyDynaBean bean = new LazyDynaBean();
JXPathContext context = JXPathContext.newContext(bean);
Iterator i = context.iterate("anything");
i.hasNext();
Which is due to the fact that in org.apache.commons.jxpath.ri.model.dynabeans.DynaBeanPropertyPointer.getPropertyNames() this code:
boolean hasClass = dynaClass.getDynaProperty("class") != null;
assumes that hasClass is false if there is no property named "class". This is not true for LazyDynaClass (and therefore LazyDynaBean), which documents this feature:
"This implementation has one slightly unusual default behaviour - calling the getDynaProperty(name) method for a property which doesn't exist returns a DynaProperty rather than null. [...] For this reason the isDynaProperty(name) method has been added to this implementation in order to determine if a property actually exists."
So I guess a solution would be to check if it's a LazyDynaClass and check the existance of the property using "isDynaProperty(name)" instead.
Attachments
Issue Links
- is duplicated by
-
JXPATH-143 JXPathContext.iterate does not work with null value in LazyDynaBean
- Closed