Simone, maybe you should ask for sandbox karma at the commons dev list. Maybe this is more approbriate. However, I like your idea
Best regards, Christian On Mon, Jan 4, 2010 at 3:25 PM, Simone Tripodi <simone.trip...@gmail.com> wrote: > Hi all guys - and happy new year! > As a new ASF committer and Cocoon3 PMC member, I propose the creation > of a new Apache Lab, called "@Digester" > > @Digester > > The Apache commons-digester[1] is a great, light and fast XML parser; > it works with the SAX APIs and provides a serie of facilities to map > XML to POJOs. > It's configurable in the following ways: > * instancing and registering digester's rules into the digester; > * using the shorthand registration methods > * XML digester rules. > > Even if these methods are excellent, they are limited - if Java > objects are due to be changed quickly, all previous methods need to be > extended/modified. > > Inspired by the basic idea behind the JPA, JAXB's specifications, the > digester-annotations package would add some facilities to configure > the > commons-digester using the Java5 language metadata annotations > support, it means creating the digester ruleset introspecting the > target POJOs, using a provided set of annotations. Using the annotated > Java object it's possible to create, in runtime the digester parser, > avoiding manual updates. > > I mean, for example, given the following XML snippet > > <web-app> > [...] > <servlet> > <servlet-name>action</servlet-name> > <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> > <init-param> > <param-name>application</param-name> > > <param-value>org.apache.struts.example.ApplicationResources</param-value> > </init-param> > <init-param> > <param-name>config</param-name> > <param-value>/WEB-INF/struts-config.xml</param-value> > </init-param> > </servlet> > [...] > </web-app> > > @ObjectCreate("web-app/servlet") > public final class ServletBean { > > �...@beanpropertysetter("web-app/servlet/servlet-name") > private String servletName; > > �...@beanpropertysetter("web-app/servlet/servlet-class") > private String servletClass; > > private final Map<String, String> initParams = new HashMap<String, > String>(); > > public String getServletName() { > return this.servletName; > } > > public void setServletName(String servletName) { > this.servletName = servletName; > } > > public String getServletClass() { > return this.servletClass; > } > > public void setServletClass(String servletClass) { > this.servletClass = servletClass; > } > > �...@callmethod("web-app/servlet/init-param") > public void > addInitParam(@CallParam("web-app/servlet/init-param/param-name") > String name, > �...@callparam("web-app/servlet/init-param/param-value") String > value) { > this.initParams.put(name, value); > } > > [...] > > } > > and a special DigesterLoader is able to create Digester rules simply > by analizing the ServletBean class: > > Digester digester = DigesterLoader.createDigester(ServletBean.class); > > Of course, this approach has limitations too - i.e. it doesn't work > with 3rd part developed objects - but the combined use of the > different approaches should reduce the manually produced code. > > Current status of code: > I've already done almoust the 80% of code on google-code[2] licensed > under ASF2 license and also submitted a deprecable patch[3] on > commons-digester Jira: I would like to set up the lab, removing the > project on google-code, deprecate the patch and complete the work in > the lab, then re-propose to commons-digester community the new > feature. > > What do you think about it? I really hope you'll find this new way of > parsing XML interesting like I do :P > Thanks in advance, best regards!!! > Simone Tripodi > > [1] http://commons.apache.org/digester/ > [2] http://code.google.com/p/digester-annotations/source/browse/ > [3] https://issues.apache.org/jira/browse/DIGESTER-135 > > -- > http://www.google.com/profiles/simone.tripodi > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: labs-unsubscr...@labs.apache.org > For additional commands, e-mail: labs-h...@labs.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: labs-unsubscr...@labs.apache.org For additional commands, e-mail: labs-h...@labs.apache.org