First of all, the code written only do XML parsing and not writing (although for writing I have also some good ideas I put in Chromattic XML writer (but based on DOM instead of stax), but that is not something I want to impose at the moment :-) ).
Then for judging a framework I would say that the following criteria matter:
- performances (i.e the framework should not degrade much performance of the wrapped stax implementation)
- work with JDK 6 stax implementation (and other implementations as well)
- being expressive and have a good ratio of usefull / boiler plate code
- pass the "portlet.xml" test (because I think it is the most complex deployment descriptor we have to handle these days)
- wished : it should be part of our codebase to simplify classpath future classpath problems (given that this will likely part of the server classpath level).
Plain stax should offer the best performances (unless it is misused) however it is not expressive at all because you need to care about all stax events (specially the end tag events). The code that would need to be written for parsing portlet.xml correctly would be hard to write and maintain (i.e fix bugs).
About "staxnav", I don't think it has draw drawbacks, but that is purely subjective, so I will leave the critic to others.
For advantages I consider as valid (maybe I am forgetting some):
- it allows to write easy to read and maintain code. For about a week I spend some time rewriting portlet.xml parsing and it made the code evolve to address the complexity of portlet.xml parsing.
- the codebase remains quite simple and easy to understand
Julien
On Feb 24, 2011, at 11:54 AM, Thomas Heute wrote:
Nick, Julien, Alain,
As said before we'd like to harmonize the XML parsing accross the
GateIn projects. Let's kill this once for all...
It doesn't mean we would change the existing parsers overnight but
it means we will impose a way for any new parsing (or when we decide
to rewrite a parser).
If we need parser tools, they will go in Common module ultimately.
There might be a phase when the code will be duplicated (as Nick's
tools need to work on an untouched portal where upgrading common is
not an option).
We already agreed that StAX as a base was the way to go, I hope we
still agree ;)
Let's separate in reading/writing XML (doesn't necessarily
necessarily mean marhalling/unmarshalling BTW) and agree on both.
Reading XML:
Option 1:
Plain StAX, JBoss AS 7 uses that (in fact they use StAX
Mapper, a very lightweight library made by the JBoss AS7 team.
https://github.com/jbossas/staxmapper/ which only helps to work with
multiple namespaces + some little helpers for ignoring part of the
file, format the XML when writing...)
One example of JBoss AS 7 parsing file:
https://github.com/emuckenhuber/jboss-as/blob/master/web/src/main/java/org/jboss/as/web/WebSubsystemParser.java
Option 2:
Nick's stuff (please explain advantages/drawbacks)
Option 3:
Julien/Alain's stuff (please explain advantages/drawbacks)
Writing XML:
Option 1:
Plain StAX (well-formed guaranteed over plain Writer)
Option 2:
Nick's stuff (please explain advantages/drawbacks)
Option 3:
Julien/Alain's stuff (please explain advantages/drawbacks)
Note that there are other utilities and frameworks based on StAX:
Stax-Utils:
http://stax-utils.dev.java.net/
StaxMate:
http://wiki.fasterxml.com/StaxMateHome
Apache Axiom:
http://ws.apache.org/commons/axiom/
Thomas