Interesting. We use DynamicPropertyHandler with a class that does not
implement Collection or Map, but is similar to a Map with arbitrary
dynamic properties (including properties that are collections).
JXPath treats both Maps and Collections specially in XPath expressions
(note that Map is not a Collection). The idea of traversing such
collections in XPath expressions is a central feature of JXPath. This
allows XPath expressions to locate objects in complex object graphs.
Perhaps you can warp the collection in another object to hide it from XPath.
Vos, Jerry R. wrote:
I actually am ok with hiding the elements of the list, but I just was
giving a simple example. However I'm having some trouble getting the
dynamic handler to be used. From the user guide I got that you can use
this on collections, and that I could specify whatever I wanted,
however, it appears that registering these only works on maps.
If I have the property handler I gave before (the getProperty method was
a little wrong in the method it called on Bar, but anyway), and I do:
JXPathIntrospector.registerDynamicClass(Bar.class, MyHandler.class);
My handler is only used if Bar doesn't extend any collection, or extends
a Map collection. If Bar extends say ArrayList, my dynamic handler
isn't used, however, if Bar extends HashMap it is used.
Can anyone provide some guidance on this? Are handlers only useful on
map collections (which seems like a bug not a feature) or do I need to
register using some other method / type of handler?
Jerry
-----Original Message-----
From: Paul Copeland [mailto:[EMAIL PROTECTED]
We are using DynamicPropertyHandler similar to the way you have it.
It
looks like you will only be able to get the "x' property and not the
elements of the array list. Do you want to hide the list? Maybe you
need a name for the list too so the list can also be accessible to
XPath
expressions.
Vos, Jerry R. wrote:
public class BarHandler implements DynamicPropertyHandler {
public Object getProperty(Object object, String propertyName) {
if (propertyName.equals("x")) {
return ((Bar) object).getSubContexts();
}
return null;
}
public String[] getPropertyNames(Object object) {
return new String[] { "x" };
}
public void setProperty(Object object, String propertyName, Object
value) {
throw new UnsupportedOperationException("");
}
}
And then something like
JXPathIntrospector.registerDynamicClass(Bar.class, BarHandler.class);
Anyway, will update with the results of this. If anyone sees an
obvious
problem with that please let me know.
Jerry
Vos, Jerry R. wrote:
public class Bar extends ArrayList {
public String getX() { return "xValue" }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]