<document xmlns="http://maven.apache.org/changes/1.0.0">
	<properties>
		<title>PracticalXML Change Log</title>
	</properties>

    <body>
        <release version="1.1.17" date="2013-09-07"
            description="ParseUtil, Converters">
            <action dev='kdgregory' type='add'>
                Bean conversion: add options to convert enums using their string value
            </action>
            <action dev='kdgregory' type='update'>
                Bean Conversion: converter-specific attributes are only namespaced if
                caller defines a namespace for conversion result (ie, the only time it
                matters is when the caller needs to separate application elements from
                the rest of the world)
            </action>
            <action dev='kdgregory' type='update'>
                ParseUtil.parseFromClasspath() now defaults to context classloader
            </action>
            <action dev='kdgregory' type='update'>
                Support explicit Xalan serializer
            </action>
        </release>

        <release version="1.1.16" date="2013-08-28"
            description="DomUtil, Converters">
            <action dev='kdgregory' type='add'>
                DomUtil.adoptChild(): moves a child from one DOM to another and attaches it to a
                new parent
            </action>
            <action dev='kdgregory' type='update'>
                Bean conversion: support subclasses of java.util.Date (as long as they have a
                constructor that takes a long)
            </action>
            <action dev='kdgregory' type='update'>
                Bean conversion: revise format of Calendar conversion; include milliseconds
            </action>
        </release>

        <release version="1.1.15" date="2013-06-30"
            description="Converters">
            <action dev='kdgregory' type='update'>
                Bean2XmlConverter: add option to call setAccessible(true) on accessor methods;
                handles case where object graph has a private class with public methods
            </action>
            <action dev='kdgregory' type='update'>
                Bean2XmlConverter/Xml2BeanConverter: add option to capture exceptions rather than
                throw them; useful when working with data types that the converter can't handle
            </action>
        </release>

        <release version="1.1.14" date="2013-06-15"
            description="Converters, Asserts">
            <action dev='kdgregory' type='add'>
                DomAsserts: add assertNotExists()
            </action>
            <action dev='kdgregory' type='update'>
                Bean2XmlConverter: recognize circular references; throw by default, optionally skip
            </action>
        </release>

        <release version="1.1.13" date="2012-08-01"
            description="DOM, parsing, build">
            <action dev='kdgregory' type='add'>
                DomUtil: add removeAllChildren()
            </action>
            <action dev='kdgregory' type='add'>
                ParseUtil: add parseFromClasspath()
            </action>
            <action dev='kdgregory' type='update'>
                Add dependency on KDGCommons; deprecate StringUtils
            </action>
            <action dev='kdgregory' type='update'>
                Change Central Repository deployment
            </action>
        </release>

        <release version="1.1.12" date="2012-05-17"
            description="XPath">
            <action dev='kdgregory' type='add'>
                FunctionResolver: add clone(), toString()
            </action>
            <action dev='kdgregory' type='add'>
                XPathWrapperFactory: creates XPathWrapperss with same config
            </action>
            <action dev='kdgregory' type='update'>
                XPathWrapper.bindDefaultNamespace(): deprecated due to uselessness
            </action>
        </release>

        <release version="1.1.11" date="2011-12-20"
            description="Converters, Parsing, XPath">
            <action dev='kdgregory' type='update'>
                BeanConverter: ConversionExceptions always contain location
            </action>
            <action dev='kdgregory' type='update'>
                BeanConverter: handle nexted collections
            </action>
            <action dev='kdgregory' type='update'>
                ParseUtil: add parse(File)
            </action>
            <action dev='kdgregory' type='update'>
                XPathWrapper: add evaluateAsElement()
            </action>
            <action dev='kdgregory' type='update'>
                XPathWrapper: evaluate(Node, Class) now applies a filter, not a cast
            </action>
        </release>

        <release version="1.1.10" date="2011-09-21"
            description="Converters, XPath">
            <action dev='kdgregory' type='add'>
                BeanConverter: convert additional JDK data types (Calendar, Class,
                File, Locale, TimeZone)
            </action>
            <action dev='kdgregory' type='add'>
                XPathWrapper now supports a shallow clone(), that can be used to
                produce thread-local copies
            </action>
        </release>

        <release version="1.1.9" date="2011-05-11"
            description="Converters, refactoring">
            <action dev='kdgregory' type='add'>
                Xml2JsonConverter: Add option to convert attributes as well
                as elements (tracker ID 3279326)
            </action>
            <action dev='kdgregory' type='update'>
                OutputUtil: extract transformer creation code (which may contain
                implementation-dependent cruft) into a helper class
            </action>
        </release>

		<release version="1.1.8" date="2010-12-04"
			description="JsonConverter, Json2XmlConverter">
			<action dev='kdgregory' type='add'>
                Add conversion methods that append JSON content to an existing DOM
			</action>
		</release>

		<release version="1.1.7" date="2010-11-18"
			description="Converters">
			<action dev='kdgregory' type='update'>
                Bugfix (tracker ID 3102316): Introspector was reporting
                getter/setter methods with wrong number of params (which
                made converter fail)
			</action>
		</release>

		<release version="1.1.6" date="2010-08-04"
			description="XmlUtil">
			<action dev='kdgregory' type='update'>
                Bugfix: parseXsdDatetime() was throwing incorrect exception
			</action>
		</release>

		<release version="1.1.5" date="2010-04-19"
			description="DomUtil, Xml2BeanConverter">
			<action dev='kdgregory' type='add'>
                DomUtil: getAttributes(), getLocalName(Attr)
			</action>
			<action dev='kdgregory' type='add'>
                Xml2BeanConverter: support conversion of attributes (outbound only)
			</action>
		</release>

		<release version="1.1.4" date="2010-03-04"
			description="BeanConverter">
			<action dev='kdgregory' type='add'>
                support enums (both directions)
			</action>
		</release>

		<release version="1.1.3" date="2010-01-15"
			description="CollectionConverter, DomUtil, XmlUtil, XPathWrapper">
			<action dev='kdgregory' type='add'>
                CollectionConverter
			</action>
			<action dev='kdgregory' type='add'>
                DomUtil: newDocument(QName), hasChildren(), hasElementChildren(), hasTextChildren()
			</action>
			<action dev='kdgregory' type='add'>
                XmlUtil: parseXsdDatetime() wasn't handling "Z" timezone
			</action>
			<action dev='kdgregory' type='update'>
                XPathWrapper: evaluateAsStringList(), evaluate(Node,Class)
			</action>
		</release>

		<release version="1.1.2" date="2009-12-31"
			description="DomUtil, NodeListIterator">
			<action dev='kdgregory' type='add'>
                NodeListIterator: now supports filtering of list by superclass
			</action>
			<action dev='kdgregory' type='update'>
                DomUtil: use NodeListIterator for getChildren()
			</action>
			<action dev='kdgregory' type='update'>
                NodeListIterator: recognize when NodeList is actually a Node (and traverse
                using nextSibling links if it is)
			</action>
		</release>

		<release version="1.1.1" date="2009-12-30"
			description="SimpleXMLReader, XMLFilterImplBridge">
			<action dev='kdgregory' type='add'>
                SimpleXMLReader: a subclass of XMLFilterImpl that implements parse()
                via configured or provided SAX parser (base class delegates)
			</action>
			<action dev='kdgregory' type='add'>
                XMLFilterImplBridge: used to link SAXParser output to XMLFilterImpl,
                enabling filter overrides
			</action>
		</release>

		<release version="1.1.0" date="2009-11-30"
			description="Conversion Utilities">
			<action dev='kdgregory' type='add'>
				net.sf.practicalxml.converter package, with BeanConverter
                and JsonConverter as static front-end classes
			</action>
			<action dev='kdgregory' type='update'>
				OutputUtil: overloads of compact() and indent() that take arbitrary Source
                and Result params
			</action>
			<action dev='kdgregory' type='update'>
                XmlUtil: formatXsdBoolean(), parseXsdBoolean()
			</action>
		</release>

		<release version="1.0.5" date="2009-09-15"
			description="DomAsserts, DomUtil">
			<action dev='kdgregory' type='add'>
				DomUtil: filter()
			</action>
			<action dev='kdgregory' type='update'>
				DomAsserts: XPath assertions now take any node as
				initial context
			</action>
			<action dev='kdgregory' type='update'>
				DomUtil: appendText() now returns the created node
			</action>
			<action dev='kdgregory' type='update'>
				DomUtil: getChildren(), getChild(), trimTextRecursive(),
                and removeEmptyTextRecursive() now take any Node (so you
                can pass Document as well as Element)
			</action>
		</release>

		<release version="1.0.4" date="2009-09-10"
			description="NodeListIterator">
			<action dev='kdgregory' type='add'>
				NodeListIterator: wrapper for a NodeList that provides
				full iterator functionality
			</action>
		</release>

		<release version="1.0.3" date="2009-07-14" description="XmlUtil">
			<action dev='kdgregory' type='add'>
				XmlUtil: add formatXsdDecimal()
			</action>
		</release>

		<release version="1.0.2" date="2009-04-27" description="OutputUtil, XmlBuilder">
			<action dev='kdgregory' type='add'>
				OutputUtil: added support for XMLReader as input source
			</action>
			<action dev='kdgregory' type='update'>
				XmlBuilder: use SAX for text output; support PI nodes
			</action>
		</release>

		<release version="1.0.1" date="2009-04-25" description="XmlUtil">
			<action dev='kdgregory' type='add'>
				XmlUtil: add .scape(), unescape()
			</action>
		</release>

		<release version="1.0.0" date="2009-01-14" description="First production release"/>
	</body>
</document>
