Changes in V3.1.0 since V3.0.2

* update build and deployment artifacts to standardize naming and remove unused items 
* XMLBEANS-502: Allow to clear all ThreadLocals from the current thread
* XMLBEANS-503: Allow to specify -nowarn in the Ant task
* XMLBEANS-537: Add missing StscState.end() to avoid memory leaks
* XMLBEANS-532: Streamline build.xml and update tests to Junit4
* XMLBEANS-531: Fix schema gen of attributes
* XMLBEANS-530: Allow namespaces of XmlOptions to be passed to the XQuery engine
* XMLBEANS-529: Format xmlobjects to the correct string representation on XPath access
* XMLBEANS-528: Allow document locator to be set after initialization
* XMLBEANS-527: Rename shell script directory, to align on typical directory layout
* XMLBEANS-526: Fix issue with loading META-INF/services files
* XMLBEANS-538: fix issue with parsing DOM with DTD

Changes in V3.0.2 since V3.0.1

* XMLBEANS-520: wrong name for source(s) artifact
* XMLBEANS-519: issue when using old XML parser versions
* XMLBEANS-506: NPE trying to load resource file if XmlBeans was loaded by the bootstrap ClassLoader

Changes in V3.0.1 since V3.0.0

* XMLBEANS-518: add support to XmlOptions to allow control over the XML parser settings that affect DTD loading
and entity expansion

Changes in V3.0.0 since V2.6.0

* XMLBEANS-517: use safe XML parsers
* XMLBEANS-516: remove unnecessary javax and org.w3c classes
* XMLBEANS-515: remove piccolo support
* XMLBEANS-514: make java 6 the lowest supported runtime
* XMLBEANS-489: fix for Cursor getAllNamespaces not returning default namespace
* Fix for XMLBEANS-499: xmlbeans2.6.0.jar contains duplicate class files (causes issues
on Android)
* XMLBEANS-447: Drop the ConcurrentReaderHashMap source code
* Fix for XMLBEANS-404: entitizeContent CDATA loop iterating too many times (causes
assertion error or ArrayIndexOutOfBoundsException in replace)
* Fix for XMLBEANS-332: XMLBeans changes surrogate pair bytes to question marks

Changes in V2.6.0 since V2.5.0

* Add new xml option CopyUseNewSynchronizationDomain used for copy.  
This fixes the scenario when copy and access (ex. selectPath) are used 
in a multithreading environment.
* Entitize \r when not in pretty print, this helps with maintaining \r
entities.
* Fix validation of integer value containing dot char.
* Fix chars  in comments to avoid errors in IntelliJ under linux.
* Update durations to latest spec.
* Fix for compiling schema that contains complex type with simple 
content that has facets defined in the base simple type
* Fix for Piccolo lexer when read method returns 0.
* Fix to preserve the CDATA bookmarks when copy from one xmlobject to 
another.
* Fix bug when resizing circular buffer in saver's output stream 
implementation.
* Fix for bug when not specifing type for a particle in derived schema 
type and when minOccurs is 0.
* Fixed error messages when contain base and derived type names.
* Introducing a default maximum entity replacement limit of 10kb, it can 
be controled by using the option XmlOptions.setLoadEntityBytesLimit.
* Fixed javadoc for inst2xsd and xsd2inst tools.
* Fix NPE in SchemaTypeImpl.getEnumJavaClass().
* Added multiple entry points and refactored code for xsd2inst code.
* Remove org.w3c.dom files from xbean.jar.
* Add another xpath and xquery interface implementation.
* Add src/xmlinputstream classes org.apache.xmlbeans.xml.stream.* to 
xmlpublic.jar.
* Make bootstrap run twice to avoid GUMP error emails.
* Fix for bug XMLBEANS-396: GML 3.1.1 generated code fails to compile.
* Fix for bug XMLBEANS-412: Pattern facet regex requires dash - to be 
escaped.
* Fix for bug XMLBEANS-414: error cvc-complex-type.2.1: Element 'XXXX' 
with empty content type cannot have text or element content.

Changes in V2.5.0 since V2.4.0

* Exit codes for InstanceValidator
* Decimal precision handling fix in xsd2inst
* Option to perform additional, stricter Schema validation checks: XMLBEANS-350
* updated pattern for dayTimeDuration
* Extended year min/max value limitations
* Support for date and time types with hour 24.
* NOTATION built-in type
* DocType fix when root element is changed
* "User types" feature - allows mapping of Schema simple types to custom user Java classes
    http://wiki.apache.org/xmlbeans/UserTypes
* Nested enumeration type compilation error fix: XMLBEANS-381
* Deadlock fix in generated impl setter simple and array
* Required attribute fix in streaming validator
* Many other fixes and optimizations


Changes in V2.4.0 since V2.3.0

* Pluggable XPath/XQuery engine support
* Upgraded support for Saxon 9
* Added Schema compilation option to skip errors in case duplicate component declarations are encountered.
* Finer grained support for CDATA
* Tool to generate XPath for a given cursor position in a document
* added more fine-grained control over XML to Java name mapping
* Add support for JVM-supported encodings
* Adding XmlError codes
* Replace static HashMaps with WeakHashMaps
* Fix for XMLBEANS-309 Warnings on Generated code
* Fix for XMLBEANS-361 invalid NaN comparisons
* Fix qname marshaling when empty namespace
* Various other bug fixes


Changes in V2.3.0 since V2.2.0

* Improved Saxon support, Saxon 8.8 became the recommended version
* Added options to control use of CDATA sections when saving to XML
* Added support for QNames in Schema annotations
* Added support for new encodings: UTF-16LE, UTF-16BE, CP936/GBK.
* Fix: overzealous whitespace cropping after parsing entities like &amp; (XMLBEANS-274)
* Fix: selectPath() with setXqueryCurrentNodeVar() option does not work for Saxon (XMLBEANS-276)
* Fix: synchronization problem with array setters
* Fix: Saver$TextSaver.replace method throws java.lang.ArrayIndexOutOfBoundsException (XMLBEANS-209)
* Fix: QNameSet generated by QNameSet.forArray(QName[]) can't be unioned with other QNameSets (XMLBEANS-290)
* Fix: java.lang.ArrayIndexOutOfBoundsException when saving XML (XMLBEANS-291)
* Fix: XQuery gives wrong result with Saxon 8.6.1 (XMLBEANS-275)
* Fix: bug during generation of complex types with simple content
* Fix: improved error handling during loading of Schema type system
* Fix: bugs in Duration serialization
* Fix: XMLCursor.getTextValue()
* Fix: Remove year zero from GDate, GDateBuilder and XmlCalendar per XMLSchema spec D.3.2


Changes in v2.2.0 since v2.1.0:

* Allow polymorphism in Extension Interfaces Feature
* Fix for circular buffer in TextSaver
* Tuned synchronization for multithreaded validation
* Updated to the latest XMLSchema.xsd - January 25, 2006
* Better QName validation
* Fix insertion positions when using substitution groups with arrays
* Updated XmlBeans to work with SaxonB-8.6.1 in place of SaxonB8.1
* Fix for regex validation in multi-threaded, multi-processor environment
* Fix for schema compilation error when restricting complex type with simple content
* Implemented XMLInputStream interface for saving a store
* XQuery external variable binding support
* Various other bug fixes


Changes in v2.1.0 since v2.0.0:

* Fixed the issue whereby some IDEs would have problems with the TypeSystemHolder class being generated in the classes directory
* Better integration with Maven
* Implemented support for ID/IDREF in DTDs via DOM's .getElementByID()
* Integrated a patch that makes XmlBeans work in a sandboxed environment
* Added the ability to control entitization of characters when saving documents
* Fixed issue with memory reclamation in multi-threaded environments, which was delayed too much so it could be mistaken for a memory leak
* Added numerous new test cases and performance tests
* Continued improving performance, especially in the DOM support and XmlCursor areas
* Added column numbers support in our snapshot of Piccolo; validation and XMLSchema error reporting benefit from this and is of course usable from user code
* Line/column number is now also available for end-tags
* Solved a legal inconsistency surrounding our use of JSR173 APIs
* Fixed a lot of reported issues in various areas of the product


Changes in v2.0.0 since v2.0.0-beta1:

* many performance related changes, especialy in the DOM and Cursor areas
* rewrite of the <xs:redefine> support
* Completed the implementation of Filer
* new documentation on xs:any, validation plus updates of the old docs
* many bug fixes, including perm gen memory bug


Changes in v2.0.0-beta1:

* new store implementation, including native DOM implementation
* Piccolo is now the default parser.XmlOptions.setLoadUseXMLReader (XMLReader xmlReader) can be used when a diffrent parser is required.
* Sample xml generation from an schema file
* New failfast behavior for simple types, more consistent
* EntityResolver is setable in SchemaCompiler
* XPath 2.0 and Xquery support through Saxon
* java 1.5 generics for array properties added to generated source
* Simplified working with substitution groups by adding XmlObject.substitute() method
* "-noVDoc" command-line option for scomp to skip validation of <xs:documentation> contents
* uniform access to the getSourceName() method in Schema Object Model
* Cleaned up schema compilation APIs with a XmlBeans.compileXmlBeans()
* Added error codes and improved validation error messages
* Changed .xsb format and loading strategy to improve performance
* Ability to pass URLs instead of Files for Wsdl/Schemas
* Added option to pass in "##local" to -allowmdef
* Inst2xsd: support for xsi:nil and qname fix.
* adding getCurrentElementSchemaType in Validator for finding schema types of elements with xsi:type attribute
* adding ValidatingInfoXMLStreamReader for PSVI access on XMLStreamReaders
* added Location to streaming validation errors
* Instance 2 schema tool
* Support for arbitrarily nesting <xsd:redefine>s
* New "schema bookmark" mechanism allowing one to tag user data on Schema Object Model entities
* Add ability for XmlSaxHandler to insert bookmarks while loading
* Added a diff utility that compares two jars (or directories) containing compiled Schema types
* Interface and pre-post extensions
* Enabled ValidatingXMLStreamReader to start validating from both current and next event in the XMLStreamReader
* Functionality to retrieve xml validation errors programatically
* Added saver options to not save xml decl
* Added ability to compile Schemas containing references to SOAP11 encoded arrays
* selectChildren and selectAttributes for dynamic getters and some wildcard scenarios
* Location in ValidatingXmlStreamReader
* Added a wrapper over jsr173's XMLStreamReader
* Added support for default value in XMLStreamReaderExt interface and implementation
* Adding typed value for QName case in the Validator
* Adding an utility for validation of simple schema types
* Improved the Validator to ofer PSVI info
* Exposed some of the XMLSchema validator functionality in the public interfaces
* Added support for XML Catalog, based on Apache Commons CatalogResolver
* Added XMLStreamReaderExt an extention of XMLStreamReader which alowes getting strongly typed java values from a stream
* Adds support for annotations in XMLSchema
* Added JSR 173 support

* performance tests
* various feature tests
* samples and documentation
* packaging, licencing changes
