|
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... The rule is to call
xmlCursor.dispose() after you finished the work with a cursor.
Cezar
From: Tim
Parker [mailto:[EMAIL PROTECTED] 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] That is a good article
to read, also check out the tests under
test\cases\xbean\extensions. Cezar From: Tim
Parker [mailto:[EMAIL PROTECTED] 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] 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] 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:complexType
name="NVPCollection"> <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 ===================
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 containinformation of BEA Systems, Inc., its subsidiaries and affiliatedentities, that may be confidential, proprietary, copyrighted and/orlegally privileged, and is intended solely for the use of the individualor entity named in this message. If you are not the intended recipient,and have received this message in error, please immediately return thisby email and then delete it._______________________________________________________________________Notice: This email message, together with any attachments, may containinformation of BEA Systems, Inc., its subsidiaries and affiliatedentities, that may be confidential, proprietary, copyrighted and/orlegally privileged, and is intended solely for the use of the individualor entity named in this message. If you are not the intended recipient,and have received this message in error, please immediately return thisby 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. |
- XMLBookmark question... Tim Parker
- RE: XMLBookmark question... Cezar Andrei
- RE: XMLBookmark question... Tim Parker
- Re: XMLBookmark question... Eric Vasilik
- RE: XMLBookmark question... Tim Parker

