| $Id: RELEASE-NOTES.txt,v 1.13.2.2 2004/08/30 08:01:47 rdonkin Exp $ |
| |
| |
| Commons Digester Package |
| Version 1.6 |
| Release Notes |
| |
| |
| INTRODUCTION: |
| ============ |
| |
| This is mostly a feature release. A few minor bugs have been fixed (as listed |
| below) but Digester 1.5 proved to be a very stable release. |
| |
| IMPORTANT NOTES |
| =============== |
| |
| New License |
| ----------- |
| This release is done under version 2.0 of the Apache License. |
| Please see the LICENSE.txt and NOTICE.txt files in the distribution. |
| |
| RSS Support |
| ----------- |
| The RSS package present in previous distributions of Digester was only ever |
| intended to be a "worked example", so the code has been moved to the |
| "src/examples/api/rss" directory within the CVS repository, and is no |
| longer part of the standard Digester binary distribution. However |
| the same package structure has been preserved, so any users who were using the |
| rss code in production should just have to compile the example code and |
| include that additional jar in the classpath. These classes are still contained |
| in the source distribution and so (for those for which such things matter) |
| are still officially released (though no longer distributed in the binary). |
| |
| Examples Added |
| -------------- |
| Several examples have been added to CVS at src/examples, for the enlightenment |
| of new Digester users. They can be access either through CVS or by grabbing the |
| source distribution. |
| |
| Author and Version javadoc tags removed |
| --------------------------------------- |
| All @author tags were removed, as per Apache Foundation policy. A list of |
| all the developers and contributors involved in Digester can still be |
| found via the Digester website, or in the "project.xml" file in the base |
| directory of the Digester CVS repository. |
| |
| All @version tags were removed as they were not considered to be useful. |
| |
| Dependencies |
| ------------ |
| The 1.6 Digester release supports greater choice for the user in terms of it's |
| dependencies. By choosing the correct combination of dependencies, Digester |
| can be used with either (incompatible) series of commons-collection releases |
| or none at all. |
| |
| Compatible Dependency Sets: |
| Digester 1.6 + Logging 1.0.x + BeanUtils 1.x + Collections 2.x |
| Digester 1.6 + Logging 1.0.x + BeanUtils 1.x + Collections 3.x |
| Digester 1.6 + Logging 1.0.x + BeanUtils 1.7 |
| |
| NEW FEATURES: |
| ============= |
| |
| Improved Java Docs |
| ------------------ |
| As usual, documentation has improved in this release. |
| |
| Plugins |
| ------- |
| There is a new package org.apache.commons.digester.plugins which provides |
| the facility for rules to declare "plugin points" in the parsed xml at |
| which users can specify their own classes to be instantiated and potentially |
| configured via the same xml file. This allows xml configuration files to |
| be "user extendable", in the manner that log4j, ant, etc. are (though with |
| even more flexibility in many ways). See the package documentation for |
| more information. |
| |
| Substitution and Variable Expansion |
| ----------------------------------- |
| Via the Substitutor class and the Digester.setSubstitutor method, xml |
| attributes and element data can be manipulated before being seen by any |
| Rule instances. Taking advantage of this framework, a VariableSubstitutor |
| class is provided which allows the parsing app to set up a table of values |
| that can be referenced via "${varname}" syntax (and variants thereof) in |
| the input xml. See the package documentation for |
| org.apache.commons.digester.substitution for more information. |
| |
| Parser Feature Setter |
| ----------------------------------- |
| The ParserFeatureSetterFactory class (plus the helper classes in the |
| new org.apache.commons.digester.parser package) provides a portable |
| mechanism for setting some parser features which have not yet been |
| standardised by JAXP or similar specifications. See the package |
| documentation for more information. |
| |
| PathCallParamRule |
| ----------------- |
| This new Rule class allows the "path" to the current xml node, or |
| just the name of the current xml node, to be passed as a parameter |
| of a CallMethodRule. |
| |
| SetNestedPropertiesRule |
| ------------------------ |
| Allows child elements to be mapped to bean properties, like the |
| SetPropertiesRule maps attributes to bean properties. Example: |
| <widget> |
| <width>1</width> |
| <height>2</height> |
| <label>Hello, World</label> |
| </widget> |
| This could previously be done via the BeanPropertySetterRule and the |
| ExtendedBaseRules engine with trailing-wildcard support, but this |
| Rule can be used with the default Rules class. |
| |
| WithDefaultsRulesWrapper |
| ------------------------ |
| A Rules class which wraps any other Rules implementation and enhances it |
| so that if no rules are matched for an element in the input then a default |
| set of Rule instances are returned. |
| |
| CallMethodRule target offset |
| ---------------------------- |
| Constructors now exist on this rule to allow the target object on which the |
| method is invoked to be specified as an offset on the digester object stack. |
| Previously, CallMethodRule always targetted the top object on the stack. Note |
| that at the current time, factory methods for these constructors do not |
| exist on the Digester class; the Rule needs to be constructed directly then |
| added to the digester to access this (not commonly needed) functionality. |
| |
| CallMethodRule handling of return value from invoked method |
| ------------------------------------------------------------ |
| A protected method "processMethodCallResult" on the CallMethodRule has |
| been created so that it is simple to subclass this Rule and override this |
| method to implement special checks or other processing of the return value |
| of a method invoked via this rule. |
| |
| Digester lazy initialization |
| ---------------------------- |
| A new "initialize" method has been added that subclasses of Digester can |
| override to perform any initialization they wish to do before parsing |
| commences, but do not wish to do in the constructor. |
| |
| Digester new Rule factory methods |
| --------------------------------- |
| Factory methods have been added for the new CallParamPathRule and |
| SetNestedPropertiesRule. A factory method for the pre-existing |
| ObjectParamRule class has also been added. |
| |
| Note that the new Plugin rules do not have factory methods, nor do the |
| new variants on the CallMethodRule which take an "offset" parameter. Use of |
| these rules is considered rare enough that a factory method is not |
| necessary. This may be revised at a later time. |
| |
| Named Stacks |
| ------------ |
| The digester now provides push, pop, peek and isEmpty methods that take |
| a stack name as a parameter. These can be used for any purpose that new |
| Rule classes find useful. |
| |
| Param stack access now public |
| ------------------------------ |
| The previously package-scope methods for accessing the digester's parameter |
| stack are now public. This makes it possible for users to implement new |
| "call param" rules in their own namespace. |
| |
| The createSAXException methods are now public |
| ---------------------------------------------- |
| These previously protected methods are now public, so that Rule classes |
| (both user-implemented and in subpackages of Digester) can call them when |
| errors are encountered. |
| |
| SAXLogger access |
| ----------------- |
| Since Digester 1.2, messages have been logged about SAX events handled by |
| the Digester during parsing via a "saxLog" logging object which is different |
| from the Log object that is used for "higher-level" digester messages. |
| The new methods getSAXLogger and setSAXLogger on the Digester class allow |
| access to this separate Log instance. |
| |
| Matched rules stack |
| ------------------- |
| New member "matches" on class Digester holds a stack where each element is a |
| list of matching rules. When a child xml element is entered, the list of |
| matches is pushed onto the stack, and at end it is popped off. This |
| yields performance benefits, and potentially useful info for use by |
| rule classes. |
| |
| Entity Resolver changes |
| ----------------------- |
| The digester's default entity resolver behaviour is now to try resolving via |
| the SYSTEM id if the PUBLIC id is not present. |
| |
| XMLRules new features |
| ----------------------- |
| The ability to load rules from an InputSource has been added. |
| Support has been added for SetRootRule and ObjectParamRule. |
| The "context class loader" will be used, if one exists, when |
| resolving "include" statements in xmlrules files. |
| FromXmlRuleSet rulesets can now be added to a Digester instance |
| starting at a base pattern specified by the caller. |
| A getCause() method has been added to the XmlLoadException class. |
| |
| RuleSetBase allows patterns ending in '/' |
| ----------------------------------------- |
| The subject of this one says it all. |
| |
| Commons Collections dependency |
| ============================== |
| The commons-collections library has recently undergone a major release (3.0). |
| Digester has been tested with both commons-collections 2.1 and 3.0 and |
| there are no known issues with using either version of this library. See above |
| for the list of compatible dependency sets. |
| |
| |
| BUGS FROM PREVIOUS RELEASE |
| ========================== |
| |
| Reports Addressed |
| ------------------ |
| #22131 SetPropertiesRule: Avoid NPE when debugging enabled and no top object |
| #24613 xmlrules DTD does not provide SetRootRule |
| #25112 Cannot find digester-rules.dtd [DOCTYPE incorrect] |
| #28486 ExtendedBaseRules: Match can compute "longest match" incorrectly. |
| |
| Outstanding Reports: |
| -------------------- |
| #20903 ENH New rule for the digester (CallFactoryMethodRule) |
| #21903 ENH Include filename or uri if Digester.parse throws an exception |
| |
| Bugs fixed with no bugzilla entry |
| ---------------------------------- |
| NodeCreateRule: r1.3 end method was not popping digester stack |
| ExtendedBaseRules: r.11 (patternStart) |
| ExtendedBaseRules: r.9 (findExactAncesterMatch(parentPattern)) |
| |
| |
| DEPRECATION: |
| ============ |
| None |
| |