OK, email #19 to the list. I'm both incredibly patient and skeptical that this will ever work. I might try and run this in a debugger and track down "how" JXPath traverses the DynaBean.... but given the reflection involved that might be a painful task. --AH
On Tue, Feb 17, 2009 at 1:11 PM, Andrew Hughes <ahhug...@gmail.com> wrote: > Ping... if anyone can help with this JXPath & DynaBeans problem I'd be > REALLY THANKFUL :) > > > On Fri, Feb 13, 2009 at 1:55 PM, Andrew Hughes <ahhug...@gmail.com> wrote: > >> Howdy, >> I've taken Matt's suggestion onboard and I have investigated DynaBeans. >> These look pretty good for all intestive purposes and there's a code >> examples below how to build the data structure: >> >> + root [...@name="ROOT"] >> + animal [...@name="ANIMAL"] >> + dog [...@name="DOG"] >> + boxer [...@name="BOXER"] >> + labrador [...@name="LABRADOR"] >> + cat [...@name="CAT"] >> + tiger [...@name="TIGER-ONE"] >> + tiger [...@name="TIGER-TWO"] >> + tiger [...@name="TIGER-THREE"] >> + lion [...@name="LION"] >> >> >> And the code looks like... >> >> LazyDynaBean lazyDynaBean = new LazyDynaBean(); //the transparent root. >> LazyDynaBean root = new LazyDynaBean(); >> LazyDynaBean animal = new LazyDynaBean(); >> LazyDynaBean dog = new LazyDynaBean(); >> LazyDynaBean cat = new LazyDynaBean(); >> LazyDynaBean boxer = new LazyDynaBean(); >> LazyDynaBean labrador = new LazyDynaBean(); >> LazyDynaBean tiger1 = new LazyDynaBean(); >> LazyDynaBean tiger2 = new LazyDynaBean(); >> LazyDynaBean tiger3 = new LazyDynaBean(); >> LazyDynaBean lion = new LazyDynaBean(); >> //set the @name property of each bean, user UPPER to make them distinct >> for examples. >> root.set("name","ROOT"); >> animal.set("name","ANIMAL"); >> dog.set("name","DOG"); >> cat.set("name","CAT"); >> boxer.set("name","BOXER"); >> labrador.set("name","LABRADOR"); >> tiger1.set("name","TIGER-ONE"); >> tiger2.set("name","TIGER-TWO"); >> tiger3.set("name","TIGER-THREE"); >> lion.set("name","LION"); >> //build the bean hierarchy. >> lazyDynaBean.set("root",0, root); >> root.set("animal",0, animal); >> animal.set("dog",0,dog); >> animal.set("cat",0,cat); >> dog.set("labrador",0,labrador); >> dog.set("boxer",0, boxer); >> cat.set("tiger",0,tiger1);//duplicate >> cat.set("tiger",1,tiger2);//duplicate >> cat.set("tiger",1,tiger3);//duplicate >> cat.set("lion",0,lion); >> JXPathContext context = JXPathContext.newContext(lazyDynaBean); >> String query = "/root/animal/cat/tiger"; >> Object value = context.getValue(query); >> >> >> But there's a problem with JXPath querying this also. Absolute Paths like >> '/root/animal/cat/tiger' or '/root/animal/cat/tiger'[2]' work perfectly. >> But I don't have anyluck doing "deep" searches. For examples the following >> just won't work. >> '//cat' >> //*...@name='LION'] >> /root/animal/cat/tig...@name='TIGER-TWO'] >> >> Things are looking up, but is this behavior to be expected? >> >> Cheers, >> --AH >> >> >> On Thu, Feb 12, 2009 at 6:43 AM, Matt Benson <gudnabr...@yahoo.com>wrote: >> >>> >>> >>> >>> >>> --- On Wed, 2/11/09, Andrew Hughes <ahhug...@gmail.com> wrote: >>> >>> > From: Andrew Hughes <ahhug...@gmail.com> >>> > Subject: Re: JXPath over Generic Collection<?>, How? >>> > To: "Commons Users List" <user@commons.apache.org> >>> > Date: Wednesday, February 11, 2009, 4:19 AM >>> > Still No Luck, I have removed recursive generic collections >>> > and have tried >>> > the following code... this is becoming a marathon effort >>> > :'( >>> > >>> > public class Thing { >>> > >>> > public Thing(String name) { >>> > this.name = name; >>> > } >>> > private String name = ""; >>> > >>> > public String getName() { >>> > return name; >>> > } >>> > private ArrayList<Thing> children = new >>> > ArrayList<Thing>(); >>> > >>> > public ArrayList<Thing> getChildren() { >>> > return children; >>> > } >>> > >>> > } >>> > >>> > >>> > public static void main(String[] args) { >>> > //get some same data >>> > Thing animal = new Thing("Animal"); >>> > //Animal.Dog.* >>> > Thing dog = new Thing("Dog"); >>> > dog.getChildren().add(new >>> > Thing("Labrador")); >>> > dog.getChildren().add(new >>> > Thing("Boxer")); >>> > animal.getChildren().add(dog); >>> > //Animal.Cat.* >>> > Thing cat = new Thing("Cat"); >>> > cat.getChildren().add(new Thing("Lion")); >>> > cat.getChildren().add(new >>> > Thing("Tiger")); >>> > animal.getChildren().add(cat); >>> > >>> > //run a query on it >>> > JXPathContext context = >>> > JXPathContext.newContext(animal); >>> > String query = "/Animal"; >>> > Thing result = (Thing) context.getValue(query); >>> > String path = context.getPointer(query).asPath(); >>> > System.out.println("Ran '" + query + >>> > "' and got '" + >>> > result.getName() + "' on path '" + path + >>> > "'."); >>> > } >>> > >>> >>> What would you be trying to select? If you want to know how to look for >>> a given Thing in this graph, I can probably help. If you want to know what >>> graph will allow you to use a preconceived notion of the xpath you want to >>> use, that will be harder. You might use [beanutils] dynabeans in >>> conjunction with [jxpath] to try and achieve the latter. >>> >>> -Matt >>> >>> > >>> > >>> > >>> > On Wed, Feb 11, 2009 at 3:08 PM, Andrew Hughes >>> > <ahhug...@gmail.com> wrote: >>> > >>> > > Yeah, that makes sense. The part that was confusing me >>> > is that if I >>> > > have... >>> > > >>> > > public class Thing { >>> > > >>> > > private List<Thing> children; >>> > > >>> > > } >>> > > >>> > > I was assuming I would need to prefix all of my >>> > expressions "steps" with >>> > > '/children'. From what you said earlier this >>> > is not the case as collections >>> > > are "auto traversed/loaded". >>> > > >>> > > Thanks again matt! I won't get to test this out >>> > til later tonight be look >>> > > foward to seeing it working!!! >>> > > >>> > > Andrew >>> > > >>> > > >>> > > On Wed, Feb 11, 2009 at 2:57 PM, Matt Benson >>> > <gudnabr...@yahoo.com> wrote: >>> > > >>> > >> >>> > >> It should be as simple as Thing _containing_ a >>> > List<Thing> rather than >>> > >> _being_ a List<Thing>. Composition over >>> > inheritance, do you see? >>> > >> >>> > >> HTH, >>> > >> Matt >>> > >> >>> > >> >>> > >> --- On Tue, 2/10/09, Andrew Hughes >>> > <ahhug...@gmail.com> wrote: >>> > >> >>> > >> > From: Andrew Hughes >>> > <ahhug...@gmail.com> >>> > >> > Subject: Re: JXPath over Generic >>> > Collection<?>, How? >>> > >> > To: "Commons Users List" >>> > <user@commons.apache.org>, >>> > >> gudnabr...@yahoo.com >>> > >> > Date: Tuesday, February 10, 2009, 7:06 PM >>> > >> > Matt, Thank You. >>> > >> > >>> > >> > Is there any other data structure I can use >>> > that would work >>> > >> > with JXPath? My >>> > >> > requirement is that... a "Thing" >>> > can have contain >>> > >> > multiple child "Thing(s)" >>> > >> > (and the children are allowed to be >>> > non-unique). >>> > >> > This is equivalent to an XML element as it >>> > can contain >>> > >> > multiple child >>> > >> > elements, how do these guy's handle it I >>> > wonder? >>> > >> > >>> > >> > --Andrew >>> > >> > >>> > >> > >>> > >> > On Wed, Feb 11, 2009 at 9:09 AM, Matt Benson >>> > >> > <gudnabr...@yahoo.com> wrote: >>> > >> > >>> > >> > > >>> > >> > > I admit I hadn't looked at this with >>> > a highly >>> > >> > critical eye, but this >>> > >> > > business of Thing extending >>> > ArrayList<Thing> >>> > >> > seems quite strange to me. >>> > >> > > JXPath basically functions by >>> > "opening up" >>> > >> > collections automatically, so >>> > >> > > the very fact that Thing is itself a >>> > Collection >>> > >> > implies that a Thing will be >>> > >> > > opened up, and its children will be >>> > searched... but in >>> > >> > this example, either >>> > >> > > there are no children, at the leaves, or >>> > the children >>> > >> > themselves are >>> > >> > > (possibly empty) collections. It looks >>> > as though >>> > >> > you're trying to represent >>> > >> > > a tree structure. This may be a good >>> > example of a >>> > >> > reason for the idea of >>> > >> > > composition over inheritance. I >>> > don't think >>> > >> > you're going to get any >>> > >> > > traction using JXPath with this object >>> > model. >>> > >> > > >>> > >> > > Sorry for the bad news, >>> > >> > > Matt >>> > >> > > >>> > >> > > >>> > >> > > --- On Tue, 2/10/09, Andrew Hughes >>> > >> > <ahhug...@gmail.com> wrote: >>> > >> > > >>> > >> > > > From: Andrew Hughes >>> > <ahhug...@gmail.com> >>> > >> > > > Subject: Re: JXPath over Generic >>> > >> > Collection<?>, How? >>> > >> > > > To: "Commons Users List" >>> > >> > <user@commons.apache.org> >>> > >> > > > Date: Tuesday, February 10, 2009, >>> > 7:16 AM >>> > >> > > > Still busted. Example is now >>> > simplified. As soon >>> > >> > as a >>> > >> > > > generic Collection >>> > >> > > > becomes involved BOOM! >>> > >> > > > >>> > >> > > > The Main Method to exec: >>> > >> > > > public class App { >>> > >> > > > public static void main( >>> > String[] args ){ >>> > >> > > > JXPathContext context = >>> > >> > > > JXPathContext.newContext(new >>> > ThingRoot()); >>> > >> > > > >>> > >> > > > >>> > >> > >>> > System.out.println(((Thing)context.getValue("/root")).getName()); >>> > >> > > > } >>> > >> > > > } >>> > >> > > > >>> > >> > > > The (populated) context root I am >>> > using, where >>> > >> > root is a >>> > >> > > > single object >>> > >> > > > holding a List of Thing's. >>> > >> > > > package jxpathresearch; >>> > >> > > > >>> > >> > > > import java.util.ArrayList; >>> > >> > > > import java.util.List; >>> > >> > > > >>> > >> > > > public class ThingRoot { >>> > >> > > > private List<Thing> root >>> > new >>> > >> > ArrayList(); //this >>> > >> > > > will serve as the root. >>> > >> > > > public ThingRoot() { >>> > >> > > > Thing animal = new >>> > >> > Thing("Animal"); >>> > >> > > > root.add(animal);//Animal >>> > >> > > > Thing dog = new >>> > Thing("Dog"); >>> > >> > > > >>> > animal.add(dog);//Animal.Dog >>> > >> > > > dog.add(new >>> > >> > > > >>> > >> > >>> > Thing("Labrador"));//Animal.Dog.Labrador >>> > >> > > > dog.add(new >>> > >> > > > >>> > Thing("Boxer"));//Animal.Dog.Boxer >>> > >> > > > } >>> > >> > > > public List<Thing> >>> > getRoot() { return >>> > >> > root; } >>> > >> > > > } >>> > >> > > > >>> > >> > > > Finally here's a very simple >>> > 'Thing' >>> > >> > that >>> > >> > > > contains a List of Thing(s): >>> > >> > > > public class Thing extends >>> > ArrayList<Thing> >>> > >> > { >>> > >> > > > public Thing(String >>> > name){this.name = name;} >>> > >> > > > private String name = >>> > ""; >>> > >> > > > public String getName() {return >>> > name;} >>> > >> > > > } >>> > >> > > > >>> > >> > > > I can't query anything beyond >>> > /root, it >>> > >> > doesn't >>> > >> > > > seem to ever get traversed. >>> > >> > > > I would expect results for //Thing >>> > and >>> > >> > > > //thi...@name='Labrador'] >>> > etc but I >>> > >> > > > get no results only exceptions. >>> > >> > > > >>> > >> > > > >>> > >> > > > My brain is hurting. >>> > >> > > > >>> > >> > > > >>> > >> > > > >>> > >> > > > On Tue, Feb 10, 2009 at 12:22 AM, >>> > Andrew Hughes >>> > >> > > > <ahhug...@gmail.com> wrote: >>> > >> > > > >>> > >> > > > > I've noew tested a whole >>> > heap of >>> > >> > expressions even >>> > >> > > > //name='Tiger' nothing >>> > >> > > > > works. >>> > >> > > > > >>> > >> > > > > On Tue, Feb 10, 2009 at 12:01 >>> > AM, Andrew >>> > >> > Hughes >>> > >> > > > <ahhug...@gmail.com>wrote: >>> > >> > > > > >>> > >> > > > >> I got cracking on testing >>> > this out... no >>> > >> > luck >>> > >> > > > (yet). Here's my testing >>> > >> > > > >> code if some kind person >>> > could please >>> > >> > take a >>> > >> > > > look.... >>> > >> > > > >> First my generic >>> > collection hierarchy >>> > >> > (which only >>> > >> > > > contains a name and >>> > >> > > > >> children)... >>> > >> > > > >> >>> > >> > > > >> package jxpathresearch; >>> > >> > > > >> >>> > >> > > > >> import >>> > java.util.ArrayList; >>> > >> > > > >> >>> > >> > > > >> public class HierarchyPojo >>> > extends >>> > >> > > > ArrayList<HierarchyPojo> { >>> > >> > > > >> >>> > >> > > > >> public >>> > HierarchyPojo(String name){ >>> > >> > > > >> >>> > this.setName(name); >>> > >> > > > >> } >>> > >> > > > >> private String name = >>> > ""; >>> > >> > > > >> >>> > >> > > > >> public String >>> > getName() { >>> > >> > > > >> return name; >>> > >> > > > >> } >>> > >> > > > >> public void >>> > setName(String name) { >>> > >> > > > >> this.name = name; >>> > >> > > > >> } >>> > >> > > > >> >>> > >> > > > >> } >>> > >> > > > >> >>> > >> > > > >> >>> > >> > > > >> Next, the wrapper for the >>> > root context >>> > >> > (as Matt >>> > >> > > > suggested) and populated >>> > >> > > > >> with animals... >>> > >> > > > >> >>> > >> > > > >> package jxpathresearch; >>> > >> > > > >> >>> > >> > > > >> >>> > >> > > > >> public class >>> > CollectionRoot { >>> > >> > > > >> >>> > >> > > > >> >>> > >> > > > >> private HierarchyPojo >>> > hierarchyPojo; >>> > >> > > > >> >>> > >> > > > >> >>> > >> > > > >> public >>> > CollectionRoot(){ >>> > >> > > > >> >>> > >> > > > >> //Animal >>> > >> > > > >> >>> > >> > > > >> hierarchyPojo = >>> > new >>> > >> > > > HierarchyPojo("Animal"); >>> > >> > > > >> >>> > >> > > > >> //Animal.Dog >>> > >> > > > >> >>> > >> > > > >> HierarchyPojo dog >>> > = new >>> > >> > > > HierarchyPojo("Dog"); >>> > >> > > > >> >>> > >> > > > >> >>> > //Animal.Dog.Labrador >>> > >> > > > >> >>> > >> > > > >> dog.add(new >>> > >> > > > >>> > HierarchyPojo("Labrador")); >>> > >> > > > >> >>> > >> > > > >> //Animal.Dog.Boxer >>> > >> > > > >> >>> > >> > > > >> dog.add(new >>> > >> > > > HierarchyPojo("Boxer")); >>> > >> > > > >> >>> > >> > > > >> >>> > //Animal.Dog.Mastiff >>> > >> > > > >> >>> > >> > > > >> dog.add(new >>> > >> > > > >>> > HierarchyPojo("Mastiff")); >>> > >> > > > >> >>> > >> > > > >> //Animal.Cat >>> > >> > > > >> >>> > >> > > > >> HierarchyPojo cat >>> > = new >>> > >> > > > HierarchyPojo("Cat"); >>> > >> > > > >> >>> > >> > > > >> //Animal.Cat.Tiger >>> > >> > > > >> >>> > >> > > > >> cat.add(new >>> > >> > > > HierarchyPojo("Tiger")); >>> > >> > > > >> >>> > >> > > > >> >>> > //Animal.Cat.Cougar >>> > >> > > > >> >>> > >> > > > >> cat.add(new >>> > >> > > > HierarchyPojo("Cougar")); >>> > >> > > > >> >>> > >> > > > >> >>> > //Animal.Cat.Leopard >>> > >> > > > >> >>> > >> > > > >> cat.add(new >>> > >> > > > >>> > HierarchyPojo("Leopard")); >>> > >> > > > >> >>> > >> > > > >> //Add Animal.Dog >>> > & >>> > >> > Animal.Cat >>> > >> > > > >> >>> > >> > > > >> >>> > hierarchyPojo.add(dog); >>> > >> > > > >> >>> > >> > > > >> >>> > hierarchyPojo.add(cat); >>> > >> > > > >> >>> > >> > > > >> } >>> > >> > > > >> >>> > >> > > > >> >>> > >> > > > >> public HierarchyPojo >>> > >> > getHierarchyPojo() >>> > >> > > > {return hierarchyPojo;} >>> > >> > > > >> >>> > >> > > > >> >>> > >> > > > >> public void >>> > >> > setHierarchyPojo(HierarchyPojo >>> > >> > > > hierarchyPojo) >>> > >> > > > >> {this.hierarchyPojo = >>> > hierarchyPojo;} >>> > >> > > > >> >>> > >> > > > >> >>> > >> > > > >> } >>> > >> > > > >> >>> > >> > > > >> >>> > >> > > > >> Finally invoke and test... >>> > >> > > > >> >>> > >> > > > >> public class App >>> > >> > > > >> >>> > >> > > > >> { >>> > >> > > > >> >>> > >> > > > >> public static void >>> > main( String[] >>> > >> > args ) >>> > >> > > > >> >>> > >> > > > >> { >>> > >> > > > >> >>> > >> > > > >> JXPathContext >>> > context = >>> > >> > > > JXPathContext.newContext(new >>> > >> > > > >> CollectionRoot()); >>> > >> > > > >> >>> > >> > > > >> String query = >>> > >> > > > >>> > >> > >>> > "//hierarchypo...@name='Tiger']"; >>> > >> > > > >> >>> > >> > > > >> String fName = >>> > >> > > > context.getValue(query).toString(); >>> > >> > > > >> >>> > >> > > > >> >>> > System.out.println("Ran >>> > >> > > > '"+query+"' and >>> > got >>> > >> > > > >>> > '"+fName+"'"); >>> > >> > > > >> >>> > >> > > > >> } >>> > >> > > > >> >>> > >> > > > >> } >>> > >> > > > >> >>> > >> > > > >> >>> > >> > > > >> >>> > >> > > > >> Above, should find one >>> > entry for >>> > >> > > > 'name=Tiger' but it does >>> > not, I get an >>> > >> > > > >> exception. This still >>> > doesn't seem >>> > >> > to traverse >>> > >> > > > the Collection correctly. Any >>> > >> > > > >> help would be most >>> > welcome. >>> > >> > > > >> Exception in thread >>> > "main" >>> > >> > > > >> >>> > >> > >>> > org.apache.commons.jxpath.JXPathNotFoundException: >>> > >> > > > No value for xpath: >>> > >> > > > >> >>> > //hierarchypo...@name='Tiger'] >>> > >> > > > >> >>> > >> > > > >> Thanks for reading, >>> > >> > > > >> Andrew >>> > >> > > > >> >>> > >> > > > >> >>> > >> > > > >> >>> > >> > > > >> On Mon, Feb 9, 2009 at >>> > 10:24 PM, Andrew >>> > >> > Hughes >>> > >> > > > <ahhug...@gmail.com>wrote: >>> > >> > > > >> >>> > >> > > > >>> Thanks Matt - I will >>> > test this out >>> > >> > tomorrow >>> > >> > > > when I am back in the >>> > >> > > > >>> office... >>> > >> > > > >>> >>> > >> > > > >>> Being constructive... >>> > >> > > > >>> Surely this should at >>> > least be a >>> > >> > precondition >>> > >> > > > check and throw a specific >>> > >> > > > >>> exception if it's >>> > not supported? >>> > >> > > > >>> Thank You >>> > >> > > > >>> --Andrew >>> > >> > > > >>> >>> > >> > > > >>> >>> > >> > > > >>> On Mon, Feb 9, 2009 at >>> > 2:27 PM, Matt >>> > >> > Benson >>> > >> > > > <gudnabr...@yahoo.com>wrote: >>> > >> > > > >>> >>> > >> > > > >>>> >>> > >> > > > >>>> Most likely your >>> > problem is not >>> > >> > with >>> > >> > > > generics, but simply with the fact >>> > >> > > > >>>> that JXPath has a >>> > hard time >>> > >> > using a >>> > >> > > > collection as its root. The >>> > easiest >>> > >> > > > >>>> workaround is to >>> > use some parent >>> > >> > object to >>> > >> > > > hold a reference to your >>> > >> > > > >>>> container. >>> > >> > > > >>>> >>> > >> > > > >>>> HTH, >>> > >> > > > >>>> Matt >>> > >> > > > >>>> >>> > >> > > > >>>> >>> > >> > > > >>>> --- On Sun, >>> > 2/8/09, Andrew >>> > >> > Hughes >>> > >> > > > <ahhug...@gmail.com> wrote: >>> > >> > > > >>>> >>> > >> > > > >>>> > From: Andrew >>> > Hughes >>> > >> > > > <ahhug...@gmail.com> >>> > >> > > > >>>> > Subject: >>> > JXPath over >>> > >> > Generic >>> > >> > > > Collection<?>, How? >>> > >> > > > >>>> > To: >>> > "Commons Users >>> > >> > List" >>> > >> > > > <user@commons.apache.org> >>> > >> > > > >>>> > Date: Sunday, >>> > February 8, >>> > >> > 2009, 5:09 >>> > >> > > > PM >>> > >> > > > >>>> > Hi All, >>> > >> > > > >>>> > Hopefully the >>> > solution is >>> > >> > as easy as >>> > >> > > > the question. I would >>> > >> > > > >>>> > like to >>> > perform >>> > >> > > > >>>> > evaluation on >>> > a (very >>> > >> > simple) generic >>> > >> > > > collection... as you >>> > >> > > > >>>> > can see below >>> > >> > > > >>>> > >>> > (HeirarchyPojo). I should >>> > >> > be able to >>> > >> > > > ask for a >>> > >> > > > >>>> > >>> > HeirarchyPojo's with >>> > >> > > > >>>> > >>> > name='Bill' or the >>> > >> > 3rd >>> > >> > > > Child... The problem is that >>> > >> > > > >>>> > nothing ever >>> > evaluate on >>> > >> > > > >>>> > this data >>> > structure. >>> > >> > What's the >>> > >> > > > deal with Generic >>> > >> > > > >>>> > Collections >>> > and JXPath? >>> > >> > > > >>>> > >>> > >> > > > >>>> > p.s this is >>> > not in the >>> > >> > userguide and >>> > >> > > > would be a most >>> > >> > > > >>>> > welcomed >>> > addition (if >>> > >> > > > >>>> > we can nut >>> > this out with >>> > >> > your help). >>> > >> > > > >>>> > >>> > >> > > > >>>> > Cheers. >>> > >> > > > >>>> > >>> > >> > > > >>>> > >>> > >> > > > >>>> > package >>> > xpath.and.generics; >>> > >> > > > >>>> > >>> > >> > > > >>>> > import >>> > java.util.ArrayList; >>> > >> > > > >>>> > >>> > >> > > > >>>> > public class >>> > HeirarchyPojo >>> > >> > extends >>> > >> > > > >>>> > >>> > >> > ArrayList<HeirarchyPojo>{ >>> > >> > > > >>>> > >>> > >> > > > >>>> > public >>> > >> > HeirarchyPojo(){} >>> > >> > > > >>>> > >>> > >> > > > >>>> > private >>> > String id; >>> > >> > > > >>>> > private >>> > String name; >>> > >> > > > >>>> > >>> > >> > > > >>>> > public >>> > String getId() { >>> > >> > > > >>>> > >>> > return id; >>> > >> > > > >>>> > } >>> > >> > > > >>>> > >>> > >> > > > >>>> > public >>> > void >>> > >> > setId(String id) { >>> > >> > > > >>>> > >>> > this.id = id; >>> > >> > > > >>>> > } >>> > >> > > > >>>> > >>> > >> > > > >>>> > public >>> > String getName() >>> > >> > { >>> > >> > > > >>>> > >>> > return name; >>> > >> > > > >>>> > } >>> > >> > > > >>>> > >>> > >> > > > >>>> > public >>> > void >>> > >> > setName(String name) >>> > >> > > > { >>> > >> > > > >>>> > >>> > this.name = name; >>> > >> > > > >>>> > } >>> > >> > > > >>>> > >>> > >> > > > >>>> > } >>> > >> > > > >>>> >>> > >> > > > >>>> >>> > >> > > > >>>> >>> > >> > > > >>>> >>> > >> > > > >>>> >>> > >> > > > >>> > >> > >>> > --------------------------------------------------------------------- >>> > >> > > > >>>> To unsubscribe, >>> > e-mail: >>> > >> > > > user-unsubscr...@commons.apache.org >>> > >> > > > >>>> For additional >>> > commands, e-mail: >>> > >> > > > user-h...@commons.apache.org >>> > >> > > > >>>> >>> > >> > > > >>>> >>> > >> > > > >>> >>> > >> > > > >> >>> > >> > > > > >>> > >> > > >>> > >> > > >>> > >> > > >>> > >> > > >>> > >> > > >>> > >> > >>> > --------------------------------------------------------------------- >>> > >> > > To unsubscribe, e-mail: >>> > >> > user-unsubscr...@commons.apache.org >>> > >> > > For additional commands, e-mail: >>> > >> > user-h...@commons.apache.org >>> > >> > > >>> > >> > > >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > --------------------------------------------------------------------- >>> > >> To unsubscribe, e-mail: >>> > user-unsubscr...@commons.apache.org >>> > >> For additional commands, e-mail: >>> > user-h...@commons.apache.org >>> > >> >>> > >> >>> > > >>> >>> >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org >>> For additional commands, e-mail: user-h...@commons.apache.org >>> >>> >> >