I knew I was close :-> Thank you!
Tim -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Eric Vasilik Sent: Wednesday, March 29, 2006 4:26 PM To: [email protected] Subject: Re: XMLBookmark question... Where you call setBookmark: if (bmk == null) { tmpCursor.setBookmark(bmk); rval = "created new bookmark:"; } else You are always passing a null bookmark, which is a no-op. - Eric On 3/29/06, Tim Parker <[EMAIL PROTECTED]> wrote: > > Are there any examples of XMLBookmark usage?? I don't seem to be able > to get back a bookmark I set, and I'm having trouble seeing what I'm > doing wrong... > > I've created an extension 'getSomething()' for an XMLBeans-derived > collection type, and I'm trying to use a bookmark to associate a > HashMap object with the collection - but when I create a cursor and > set a bookmark, I don't get the bookmark back when I try to get it.. > And... I've been unable to find examples anywhere which illustrate a working case... > > My extension function is currently... > > public static String getSomething(XmlObject xo) > { > NVPCollection coll = (NVPCollection)xo; > XmlCursor tmpCursor = coll.newCursor(); > NVPBookmark foo = new NVPBookmark(); > NVPBookmark bmk; > > ArrayList fubar = new ArrayList(); > > bmk = > (NVPBookmark)tmpCursor.getBookmark(NVPBookmark.class); > > String rval; > > if (bmk == null) > { > tmpCursor.setBookmark(bmk); > rval = "created new bookmark:"; > } > else > rval = "already had a bookmark:"; > > tmpCursor.getAllBookmarkRefs(fubar); > > tmpCursor.dispose(); // make sure we don't leak... > > return rval + String.valueOf(fubar.size()); > > } > And the bookmark class is just a shell... > > public class NVPBookmark extends XmlCursor.XmlBookmark { > private HashMap nameMap = new HashMap(); > > public HashMap getMap() > { > return nameMap; > } > } > > ________________________________ > > From: Cezar Andrei [mailto:[EMAIL PROTECTED] > Sent: Wednesday, March 29, 2006 1:20 PM > > To: [email protected] > Subject: RE: XMLBookmark question... > > From: Cezar Andrei [mailto:[EMAIL PROTECTED] > Sent: Wednesday, March 29, 2006 1:20 PM > > To: [email protected] > Subject: RE: XMLBookmark question... > > > > > The rule is to call xmlCursor.dispose() after you finished the work > with a cursor. > > > > Cezar > > > > ________________________________ > > > From: Tim Parker [mailto:[EMAIL PROTECTED] > Sent: Tuesday, March 28, 2006 4:00 PM > To: [email protected] > Subject: XMLBookmark question... > > > > As a follow-on to the HashMap implementation questions... I feel like > I may be missing something but... I'm looking at creating an extension > method for my NVPCollection class something like: > > > > public String getValueByMap(String keyName) > > > > If I hang the hashmap on a bookmark, how do I get the bookmark without > having to do a newCursor() every time? Or is it OK to run newCursor() > dozens or hundreds of times without risk of performance or memory problems? > Am I missing something? > > > > Tim > > > > > > > ________________________________ > > > From: Cezar Andrei [mailto:[EMAIL PROTECTED] > Sent: Tuesday, March 28, 2006 4:33 PM > To: [email protected] > Subject: RE: alternate representations of collections in XMLBeans?? > > That is a good article to read, also check out the tests under > test\cases\xbean\extensions. > > > > Cezar > > > > ________________________________ > > > From: Tim Parker [mailto:[EMAIL PROTECTED] > Sent: Tuesday, March 28, 2006 3:08 PM > To: [email protected] > Subject: RE: alternate representations of collections in XMLBeans?? > > > > Thank you for the quick reply - I'll look into the XMLBookmark idea... > > > > Is there anything else I need to know about the preSet and postSet methods? > I found documentation (including the operationType values) at > http://dev2dev.bea.com/pub/a/2004/11/Configuring_XMLBeans.html > - is this the latest-and-greatest, or is there a better and/or more > current reference available? > > > > Tim > > > ________________________________ > > > From: Cezar Andrei [mailto:[EMAIL PROTECTED] > Sent: Tuesday, March 28, 2006 2:29 PM > To: [email protected] > Subject: RE: alternate representations of collections in XMLBeans?? > > Tim, > > > > I would recommend using the extensions, otherwise modifying the > generated code is definitely possible but missing even a small thing > would break the code. > > > > Back to using extensions, if one wants to store a state he can do it > by using XmlBookmark - which stays with the xml entity even if moved. > In your case the hash map should be stored on 'metadata' element. > > Also the pre/post Set methods are called every time the document is > about to change, so you'll get calls for all > creation/modification/deletion events, made through XmlObject > interfaces. Modification through other interfaces like XmlCursor or > DOM will not trigger the calls to the pre/post Set methods. > > > > Cezar > > > > ________________________________ > > > From: Tim Parker [mailto:[EMAIL PROTECTED] > Sent: Tuesday, March 28, 2006 1:11 PM > To: [email protected] > Subject: alternate representations of collections in XMLBeans?? > > > > > The XMLBeans representation of a collection (for something with a > maxOccurs GT 1) is a bit limiting... I'm looking to extend it to look > more like a Map interface... and I'm hitting some brick walls... > > > > > > For discussion sake, I'll use a structure with three fields: > > > > > > struct foo > > > { > > > int ID; > > > String name; > > > HashMap metadata; > > > } > > > > > > The 'metadata' field contains arbitrary name/value pairs - for > simplicity we'll say 'name' and 'value' fields in the hashmap are always strings... > > > > > > The obvious (to me, at least) schema for this is something like: > > > > > > <xs:complexType name="NVP"> > <xs:sequence> > <xs:element name="Value" type="xs:string"/> > </xs:sequence> > <xs:attribute name="Name" type="xs:string"/> </xs:complexType> > > > > > > <xs:complexType name="NVPCollection"> > <xs:sequence> > <xs:element name="Entry" type="my:NVP" minOccurs="0" > maxOccurs="unbounded"/> > </xs:sequence> > </xs:complexType> > > > > > > <xs:complexType name="testCase"> > > > <xs:sequence> > > > <xs:element name="ID" type="xs:int"/> > > > <xs:element name="name" type="xs:string"/> > > > <xs:element name="metadata" type="my:NVPCollection"/> > > > </xs:sequence> > > > </xs:complexType> > > > > > > ==== > > > > > > I could build another layer on top of this, but this could get ugly - What I > really need is a way to extend NVPCollection so I can address items by name > (like in a HashMap) rather than by position... > > > > > > The ideal would be something like (assuming that we have a mechanism to bind > the 'name' field to the map key and the 'value' field to be the one of > interest)... > > > > > > NVPCollection thisCollection; > > > > > > // some magic here to get the collection populated... > > > > > > someValue = thisCollection.GetByMap("someArbitraryName"); > > > > > > .... Or we could save some binding complexity by doing > ...GetByMap("someArbitraryName","value"), saying "get the > field 'value' from the collection member whose key field contains > 'someArbitraryName'" (The presumption is that the binding to the key field > 'name' would need to be established earlier so the map can be maintained) > > > > > > ==== > > > > > > As I read the documentation, I could build an extension like this, but I'm > hosed if I want to do anything more sophisticated than a linear search > through the collection on each 'get' call - Unless I'm missing something, I > need a place to put an instance-specific HashMap object to maintain mapping > between the key field ('name') and the array index... more than a little > difficult with the 'static method' requirement for the extension (Not to > mention the population problem for the HashMap object itself, but a preSet > or postSet implementation would work as long as I never try to delete > anything).. > > > > > > Presumably I could also build an 'extendedNVPCollection' class, based on the > NVPCollection class generated by XMLBeans, but how would I wire that back > into my (XMLBeans-generated) 'testCase' class? I don't want to get into > creating wrapper classes for every layer... > > > > > > I tried ignoring the "don't touch - generated code" warnings and added some > stuff directly to the generated classes for the NVPCollection object, but > things started breaking - I'm not sure if the problem is a flaw in my > hacking or a fundamental problem I won't solve, so I'm seeking advice - am I > tilting at windmills here? > > > > > > Does anyone have ideas as to better ways to do this? > > ======================================================= > > Tim Parker > Senior Developer > PaperThin, Inc. > 617-471-4440 x 203 > [EMAIL PROTECTED] > www.paperthin.com > > =================== > > PaperThin, Inc. was recently named to KMWorld's "100 Companies that Matter > in Knowledge Management". > > Find out more at www.paperthin.com. > > > _______________________________________________________________________ > Notice: This email message, together with any attachments, may contain > information of BEA Systems, Inc., its subsidiaries and affiliated > entities, that may be confidential, proprietary, copyrighted and/or > legally privileged, and is intended solely for the use of the individual > or entity named in this message. If you are not the intended recipient, > and have received this message in error, please immediately return this > by email and then delete it. > _______________________________________________________________________ > Notice: This email message, together with any attachments, may contain > information of BEA Systems, Inc., its subsidiaries and affiliated > entities, that may be confidential, proprietary, copyrighted and/or > legally privileged, and is intended solely for the use of the individual > or entity named in this message. If you are not the intended recipient, > and have received this message in error, please immediately return this > by email and then delete it. > _______________________________________________________________________ Notice: > This email message, together with any attachments, may contain information > of BEA Systems, Inc., its subsidiaries and affiliated entities, that may be > confidential, proprietary, copyrighted and/or legally privileged, and is > intended solely for the use of the individual or entity named in this > message. If you are not the intended recipient, and have received this > message in error, please immediately return this by email and then delete > it. > --------------------------------------------------------------------- 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]

