<?xml version="1.0" encoding="UTF-8"?>
<!--
     Licensed to the Apache Software Foundation (ASF) under one or more
     contributor license agreements.  See the NOTICE file distributed with
     this work for additional information regarding copyright ownership.
     The ASF licenses this file to You under the Apache License, Version 2.0
     (the "License"); you may not use this file except in compliance with
     the License.  You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->
<document xmlns="http://maven.apache.org/changes/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/plugins/maven-changes-plugin/xsd/changes-1.0.0.xsd">
  <properties>
    <title>Apache Commons Digester Changes</title>
  </properties>
  <body>
  <release version="3.2" date="2011-12-13" description="Maintenance release.">
    <action dev="simonetripodi" type="fix" issue="DIGESTER-160">
      provide an additional artifact with shaded dependencies
    </action>
    <action dev="simonetripodi" type="fix" issue="DIGESTER-159">
      */object-param-rule is not managed in the XML rules
    </action>
    <action dev="simonetripodi" type="fix" issue="DIGESTER-157">
      Improve Set(Nested)PropertiesRuleAlias performances in the XML ruleset while binding rules.
    </action>
    <action dev="simonetripodi" type="fix" issue="DIGESTER-156">
      Make (Nested|Set)PropertiesBuilder#addAlias() fluent.
    </action>
    <action dev="simonetripodi" type="fix" issue="DIGESTER-155">
      ClassLoader reference set to DigesterLoader not set in produced Digester instances
    </action>
    <action dev="simonetripodi" type="fix" issue="DIGESTER-154">
      The DigesterBinder is not able to load primitive classes by name
    </action>
    <action dev="mbenson" type="add" issue="DIGESTER-153">
      Add Constructor support to ObjectCreateRule
    </action>
    <action dev="simonetripodi" type="add" issue="DIGESTER-152">
      The org.apache.commons.digester3.binder.DigesterLoader doesn't allow binding a default org.xml.sax.Locator
    </action>
    <action dev="simonetripodi" type="add" issue="DIGESTER-151">
      The org.apache.commons.digester3.binder.DigesterLoader doesn't allow binding a default org.xml.sax.ErrorHandler.
    </action>
  </release>
  <release version="3.1" date="2011-10-29" description="New features release.">
    <action dev="simonetripodi" type="add" issue="DIGESTER-150">
      Use Java5 Concurrent APIs to asynchronous parse()
    </action>
  </release>
  <release version="3.0" date="2011-07-06" description="New major release.">
    <action dev="simonetripodi" type="fix" issue="DIGESTER-28">
      Default ClassLoader policy unusable in EAR archive
    </action>
    <action dev="simonetripodi" type="add" issue="DIGESTER-72">
      Allow SetNextRule to fire on begin
    </action>
    <action dev="simonetripodi" type="add" issue="DIGESTER-85">
      Include filename or uri if Digester.parse(File file or String uri throws a SAXException
    </action>
    <action dev="simonetripodi" type="add" issue="DIGESTER-90">
      xmlrules does not support setNamespaceURI
    </action>
    <action dev="simonetripodi" type="fix" issue="DIGESTER-103">
      xmlrules does not support NodeCreateRule
    </action>
    <action dev="simonetripodi" type="add" issue="DIGESTER-105">
      Need to process [attribute id="name"]somename[/attribute]
    </action>
    <action dev="simonetripodi" type="fix" issue="DIGESTER-118">
      ObjectCreateRule shouldn't keep className as a field.
    </action>
    <action dev="simonetripodi" type="fix" issue="DIGESTER-123">
      xmlrules dtd does not define xmlattrs for node-create-rule
    </action>
    <action dev="simonetripodi" type="add" issue="DIGESTER-127">
      Allow DigesterLoader to accept an instance of a preconfigured Digester
    </action>
    <action dev="simonetripodi" type="add" issue="DIGESTER-131">
      Allow recursive match in ExtendedBaseRules.
    </action>
    <action dev="simonetripodi" type="add" issue="DIGESTER-132">
      Add a CompoundSubstitutor to support more than one Substitutors at a time.
    </action>
    <action dev="simonetripodi" type="fix" issue="DIGESTER-134">
      Bug in SetPropertyRule.
    </action>
    <action dev="simonetripodi" type="update" issue="DIGESTER-137">
      Public/protected static fields which intended as constants, but which are not marked final.
    </action>
  </release>
  </body>
</document>
