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