Re: structuring pull parsing code and using serializer [Re: [xmlpull-user] Java <-> XML using XMLPull]

Aleksander Slominski <[email protected]> Mon, 03 Mar 2003 12:16:48 -0500
Newsgroups gmane.text.xml.xmlpull.devel
Message-ID <[email protected]>
Naresh Bhatia wrote:

> 1) I saw some CVS updates to XmlPullUtil.java but the file just had a 
> blank XmlPullUtil class. Just wanted to make sure I am not picking a 
> wrong version. When are you estimating to drop a workable version?

hi,

still working on it. do not want to commit anything that dooes not compile.

>  
> 2) What is the difference between the two CVS repositories for XMLPull 
> API and addons:
>                a) cvs.xmlpull.org:/l/extreme/cvspub
>                b) cvs.extreme.indiana.edu:/l/extreme/cvspub

cvs.xmlpull.org is alias to cvs.extreme.indiana.edu as CVS repository 
(and web site) is hosted in Extreme! Lab (http://www.extreme.indiana.edu)

alek

>  
> Thanks.
> Naresh
>
>     -----Original Message-----
>     *From:* Aleksander Slominski [mailto:[email protected]]
>     *Sent:* Saturday, March 01, 2003 1:47 PM
>     *To:* [email protected]
>     *Subject:* Re: [xmlpull-dev] structuring pull parsing code and
>     using serializer [Re: [xmlpull-user] Java <-> XML using XMLPull]
>
>     Naresh Bhatia wrote:
>
>     > I have now worked extensively with XMLPull API and your
>     XmlPullWrapper
>     > - I love this stuff!
>
>     hi Naresh,
>
>     i am very happy to hear that :-)
>
>     > I have tried several other approaches ranging from SAX all the
>     way to
>     > the latest data binding packages, but they all fell short of my
>     > expectations. Some could not get the job done (especially when
>     it came
>     > to namespaces), others just did not present elegant solutions (I am
>     > very picky about my designs and code :->). Anyway I am really
>     > impressed by the elegance of the XMLPull API and I have decided
>     to use
>     > it for my project.
>     > 
>     > In an effort to make the API even more easier to use, I have the
>     > following suggestions. They are mainly directed at
>     XmlPullWrapper and
>     > your AddressBook example. I have refactored the code a little to
>     > demonstrate how this approach could be used on larger projects. My
>     > changes are attached along with an Ant build file.
>     > 
>     > - I have refactored the AddressBook example into 4 classes.
>     > MyAddressBook.java now contains only the main( ) method. The read
>     > methods have been refactored into the AddressBookReader class
>     and the
>     > write methods have been moved to the AddressBookWriter class. The
>     > Person class is now in its own seperate file as this is more
>     realistic
>     > on a real project.
>
>     that looks reasonable and i would like to make it into a real sample.
>     please take a look on this:
>     http://www.extreme.indiana.edu/~aslom/xml/databinding/jaxme-xmlpull/
>     <http://www.extreme.indiana.edu/%7Easlom/xml/databinding/jaxme-xmlpull/>
>
>     > 
>     > - AddressBookReader inherits from XmlPullWrapper. This gives me
>     access
>     > to the parser in all methods - the parser is no longer passed
>     around
>     > in method signatures. In addition, I do not have to "create" an
>     > XmlPullWrapper object whenever I need to use it - I am the
>     > XmlPullWrapper! This also resulted in more frequent use of the
>     > XmlPullWrapper methods as they are more accessible!
>
>     definitely that is one approach that can be taken and makes code
>     to read
>     address book very easy (just pass Reader)/
>
>     however i would like to be able to pass parser instance to address
>     book
>     reader class as it allows for greater flexibility and makes
>     possible to
>     read multiple address books from one  XML input as parser can be
>     opened
>     once with XML input and then passed to any part of code that needs it
>     (for example when address book XML is embedded in XML document i can
>     scan for addreebook tag and then pass parser instance to
>     AddressBookReader)
>
>     > 
>     > - I added a class called XmlSerializerWrapper. The idea is
>     similar to
>     > XmlPullWrapper. This class holds convenience methods for
>     > XmlSerializer. Currently I have only one method in this class
>     called
>     > writeSimpleElement( ), which allows me to write simple elements
>     such
>     > as <username>johndoe</username> in one call.
>
>     that is very good idea! defintely will add it.
>
>     > - Added a method to XmlPullWrapper called
>     getRequiredElementText( ).
>     > This method allows you to read simple elements such as
>     > <username>johndoe</username> in one call.
>
>     OK will add it.
>
>     > 
>     > - Fixed a minor bug in XmlPullWrapper.nextEndTag() - it was
>     going to
>     > the next start tag insted of the next end tag - probably a
>     cut&paste
>     > error from nextStartTag()  :-)
>
>     OK will fix it.
>
>     > - I would recommend that XmlPullWrapper and XmlSerializerWrapper be
>     > supplied along with the XMLPull API - may be not as part of the API
>     > but atleast as a supported utilities. This will encourage people to
>     > use "best practices" and the wrappers will be thoroughly tested. In
>     > addition, there will be only one standard version of the wrappers
>     > instead of Alek's version and Naresh's version :-). Of course,
>     people
>     > are free to extend these utilities as they feel fit, but the
>     baseline
>     > is always the same.
>
>     i agree - we need utilities and it is good idea to keep them
>     together in
>     one place. we have now place in XmlPull API CVS repository for such
>     additions (that are called addons), see:
>
>     http://www.xmlpull.org/v1/doc/addons.html
>     http://www.xmlpull.org/viewcvs/~checkout~/xmlpull-api-v1/addons/
>     <http://www.xmlpull.org/viewcvs/%7Echeckout%7E/xmlpull-api-v1/addons/>
>
>     after consulting with Stefan i was thinking about having XmlPullUtil
>     class with only static methods and then have interface that extends
>     XmlPullParser interface by adding useful methods (such as nextEndTag)
>     and  there is implementation wrapper that uses JDK 1.3 dynamic
>     proxies
>     <http://java.sun.com/j2se/1.3/docs/guide/reflection/proxy.html> to
>     automatically intercept calls and redirect them to parser impl or
>     XMLUtil methods. that would work as follow:
>
>     interface XmlPullWrapper extends XmlPullParser {
>        void nextEndTag(...)
>     }
>
>
>     the same for XmlSerializerWrapper, and then to actually create
>     instance
>     of wrapper:
>
>     XmlPullWrapper pw = XmlPullDynamicProxy.newPullWrapper();  
>     //default to
>     wrap parser created using default parser factory
>
>     or with more control:
>
>     // explicit wrapping that allows to wrap any instance of XmlPullParser
>     XmlPullParser pp = factory.newPullParser();
>     //...
>     XmlPullWrapper pw = XmlPullDynamicProxy.wrapparser); 
>
>     then you can use wrapper exactly the same as XmlPullParser (as it
>     extends XmlPullParser) *and * use additional methods so this code
>     would
>     work:
>
>     pw.setInput()
>     pw.next();
>     pw.nextEndTag()
>
>     this i think makes very nice use of built-in into XmlPull API
>     flexibility as it is based on factory and interfaces model so can be
>     easily extended and XmlPullDynamicProxy is factory where
>     XmlPullWrapper 
>     is extensions.
>
>     if generalized enough this should allow to compose multiple
>     extensions
>     to XmlPullParser dynamically as in this case we have example of
>     interceptor based design (some people call it "lightweight" AOP)
>
>     one thing to consider  is performance hit of using dynamic proxy
>     and i
>     plan to measure it comparing using dynamic proxy and
>     XmlPullutil/XmlPullParser directly.
>
>     anyway those are my currentideas and i look forward to hear your
>     comments.
>
>     > Here's the new main( ) function in MyAddressBook.java after the
>     > refinements mentioned above. It is much more concise.
>     > 
>     >     public static void main (String args[])
>     >     throws XmlPullParserException, IOException {
>     >       
>     >         System.out.println("reading address book from XML");
>     >         AddressBookReader addressBookReader =
>     >             new AddressBookReader(new StringReader(SAMPLE_XML));
>
>     >
>     >         Vector addressBook = addressBookReader.readAddressBook();
>     > 
>     >         //add new entry to address book
>     >         addressBook.add(new Person("Foo Bar", "Silicon Street"));
>     > 
>     >         System.out.println("serializing address book to XML");
>     >         StringWriter sw = new StringWriter();
>     >         AddressBookWriter addressBookWriter = new
>     AddressBookWriter(sw);
>     >         addressBookWriter.writeAddressBook(addressBook);
>
>     i would keep AddressBookReader/Writer stateless so they can be
>     reused so
>     it should allow setting input not only when it is created with
>     constructor
>
>     >         System.out.println("Addressbook as XML:\n"+ sw);
>     >     }
>     > I would love to get your feedback on this stuff!
>
>     i plan to drop Util and Wrapper classes into addons soon and will add
>     your modifications.
>
>     thanks,
>
>     alek
>
>     -- 
>     "Mr. Pauli, we in the audience are all agreed that your theory is
>     crazy.
>     What divides us is whether it is crazy enough to be true." Niels
>     H. D. Bohr
>
>
>
>
>     To unsubscribe from this group, send an email to:
>     [email protected]
>
>
>
>     Your use of Yahoo! Groups is subject to the Yahoo! Terms of
>     Service <http://docs.yahoo.com/info/terms/>.
>
>
> *Yahoo! Groups Sponsor*
> ADVERTISEMENT
> <http://rd.yahoo.com/M=246920.2960106.4328965.2848452/D=egroupweb/S=1706030390:HM/A=1464858/R=0/*http://www.gotomypc.com/u/tr/yh/cpm/grp/300_Cquo_1/g22lp?Target=mm/g22lp.tmpl> 
>
>
>
> To unsubscribe from this group, send an email to:
> [email protected]
>
>
>
> Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service 
> <http://docs.yahoo.com/info/terms/>.


-- 
"Mr. Pauli, we in the audience are all agreed that your theory is crazy. 
What divides us is whether it is crazy enough to be true." Niels H. D. Bohr



------------------------ Yahoo! Groups Sponsor ---------------------~-->
Get 128 Bit SSL Encryption!
http://us.click.yahoo.com/LIgTpC/vN2EAA/xGHJAA/2U_rlB/TM
---------------------------------------------------------------------~->

To unsubscribe from this group, send an email to:
[email protected]

 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/