Changes in V3.0.3 since V3.0.2

* 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

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
