Jyotsna,

JXPath is designed such that nonexistent parts of the
graph cannot be set directly.  If you know that arr[0]
might not exist yet, you must check for that condition
explicitly and install a factory to create that part
of the graph.  My test code looks like this:

OrganisationType t = new OrganisationType();
JXPathContext ctx = JXPathContext.newContext(t);
ctx.setLenient(true);
Pointer ptr = ctx.getPointer("arr[1]");
if (ptr == null || ptr instanceof NodePointer &&
!((NodePointer) ptr).isActual()) {
  ctx.setFactory(new AbstractFactory() {
    public boolean createObject(JXPathContext context,
Pointer pointer, Object parent, String name, int
index) {
      if (parent instanceof OrganisationType &&
"arr".equals(name)) {
        ArrayList l = (ArrayList) ((OrganisationType)
parent).arr;
        l.addAll(Arrays.asList(new Object[index -
l.size() + 1]));
        return true;
      }
      return super.createObject(context, pointer,
parent, name, index);
    }
  });
  ptr = ctx.createPath("arr[1]");
}
ptr.setValue("bar");

HTH,
Matt

--- Jyotsna <[EMAIL PROTECTED]> wrote:

> Hi 
>  
> I have a java bean with the following attributes and
> their getters and
> setters.
>  
>
************************************************************
>  
> public class OrganisationType implements
> Serializable {
>  
>     Long id;
>     String code;
>     String  description;
>     int version;
>     Collection arr =new ArrayList();
>     HashMap hsh =new HashMap();
>    
> Getter and setters follow.......................
>  
>
************************************************************
>  
> I am using the following code to populate the array
> list 
>  
>    OrganisationType orgna = new OrganisationType();
>    orgna.setCode("12121");
>    JXPathContext contexts =
> JXPathContext.newContext(orgna);
>    contexts.setValue("arr[1]","12");
>  
>  
> ****************And the Exception I get is
> ***************************
> org.apache.commons.jxpath.JXPathException: Exception
> trying to set value
> with xpath arr[1]; Index: 0, Size: 0
>       at
>
org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.setValue(JXPathC
> ontextReferenceImpl.java:421)
>       at
>
org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.setValue(JXPathC
> ontextReferenceImpl.java:412)
>       at TestJxPath.main(TestJxPath.java:36)
> 



 
____________________________________________________________________________________
We won't tell. Get more on shows you hate to love 
(and love to hate): Yahoo! TV's Guilty Pleasures list.
http://tv.yahoo.com/collections/265 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to