MXP1/XPP3 Changes
Author: Aleksander Slominski [http://www.extreme.indiana.edu/~aslom]

# Changes to XPP3

### 2006

- 2006-11-03 (XPP3_1_1_4b): updated SAX2 driver addon with a bug fix
  backward incompatible change: XmlElement will not accept null children (null can not be passed to addChild/addElement)

- 2006-10-23 (XPP3_1_1_4): fixed fixed Bug 201: NullPointerException in MXParserCachingStrings - calling defineEntityReplacementText now works before calling setInput

- 2006-10-22 (XPP3_1_1_4): fixed Bug 245: Serializer may write endTag unmatching startTag

- 2006-10-22: fixed XmlPull SAX2 driver not sending correct qname (rawName) in startElement() callback

- 2006-10-22: fixed Bug 246: DOM2XmlPullBuilder not handling default namespaces

- 2006-04-30 (XPP3_1_1_3__8): added equals to XmlAttributeImpl

### 2006-04-25 (XPP3_1_1_3__7)

- Reversed changes made in bug 135: implement DETECT ENCODING feature as for some types of input streams (URLConnection ...) it is not possible to do more than once new InputStreamReader(inputStream) as it somehow detects it and closes underlying input stream (b.....d!)

  In future one will need better low level byte-by-byte reading of prolog and then doing InputStream ...

### 2006-04-22 (XPP3_1_1_3__6)

- 2006-04-22: fixed bug 241: incorrect setting of endTag prefix when attribute has a prefix generated and added unit tests for it
- Towards fully resolving bug 135: implement DETECT ENCODING feature the parser will now attempt to read input stream with declared encoding if no encoding was passed in setInput()

### 2004-04

- TODO: as part of XB1 adaptation to JDK 1.5 it is now using Iterable/SimpleIteraor (local stubs) instead of Iterator

- XB1: API generally can take now QName in places where (XmlNamespace, prefix) is used

- 2005-08-11 (1.1.3.4.0, CVS TAG: XPP3_1_1_3_4_O): fixed Bug 228 overflow error in MXParser buffer sizing
- 2004-10-22 (1.1.3.4.M): fixed lookupNamespaceByName / lookupNamespaceByPrefix to work in XmlElementAdapter
- 2004-09-30 (1.1.3.4.K): performance improvement to fix Bug 214: MXParser.parseEpilog throws/catches EOFException, making it very slow
- 2004-09-30: misc. fixes to XPath support (default factory, exception handling)
- 2004-09-30: XB1 API improvements: added XmlElementAdapter, attributes can implement XmlSerializable to provide custom XML serialization, XmlAttribute now implements Cloneable, fixed (hopefully) XmlElement.castOrWrap behavior for very complex chains, added XmlElement.replaceChildrenWithText(String textContent)
- 2004-09-02 (CVS TAG: XPP3_1_1_3_4_I): fixed bug in addElement (did not set parent)
- 2004-08-19: fixed Bug 202 ArrayStoreException when defining entity replacements reported by Benjamin Amodio using suggested patch (thanks!)
- 2004-6-16 (1.1.3.4.G): added XPath support based on code Jaxen.org, a separate xpp3_xpath_VERSION.jar is built and if added to CLASSPATH then XPath support in XB1 is available
- 2004-6-16 (1.1.3.4.G): changed XB1 parse method to handle more efficiently adding thousands of children (like big arrays) avoiding N^2 in the worst case (addElement was doing lookup of parent children to check if added element was added ...)
- 2004-5-15 (1.1.3.4.D): added XmlInfosetBuilder.newInstance(factory) to allow creation of XB1 builder without using default System.getProperty() which is no possible in applets
- 2004-5-12: fixed bug in XmlElementImpl.element(int position)
- 2004-4-16: XB1 improved serialization especially handling of XmlCharacter

- 2004-4-15: added interface XmlContained as an abstraction for XML Infoset items that are contained inside other items

- 2004-4-15: backward incompatible change: XmlCharacters is now XmlContained and getParent() returns XmlContainer instead of XmlElement (JDK15 can use covariant return types but not JDK 1.4 ...)

### 2004-02 (XPP3_1_1_3_4)

- TODO allow option to ask serializer to escape chars > 127
- TODO: XB1 location info with mini XPath locator ...
- 2004-3-4: improved support for XML element wrapping: use FooAdapter foo2 = (FooAdapter) XmlElementAdapter.castOrWrap(barAdapter, FooAdapter.class); instead of new FooAdapter(barAdapter) to avoid duplicate wrappings
- 2004-2-22: backward incompatible change: to reflect better API intent XmlPullBuilder was renamed to XmlInfosetBuilder
- 2004-2-13: added cloning support to standard XPP3 standard parser (not minimum JAR file!)
- 2004-2-13: added cloning support to XmlDocument and XmlElement
- 2004-2-7: removed use of SimpleIterator replaced with standard java.util.Iterator (this is consistent with JDK 1.5 change)
- 2004-2-7: synced up with the latest XmlPull API and unit tests
- 2004-01-22: XB1: added elements() and attribute() XPath like locators to XmlElement
- 2004-01-21: allow to call XmlSerializer.flush() after serialization is finished and modified XmlPullBuilder to call it for serialize(*, ser)
- 2004-01-21: XB1: fixed bug that too many XB1 elements extended XmlContainer
- 2004-01-21: XB1:added getRoot() to XmlElement to find the topmost element container
- 2004-01-21: XB1: rewritten serialization of XmlElement to not print namespace xmlns declaration when it is not needed ...
- 2004-01-20: XB1: semantics change - addChild no longer checks if child is XmlElement and does not fix parent only addElement does calls setParent()!!!
- 2004-01-20: XB1: addition of element(namespace, name, [create]) method to facilitate XPath like traversal and path creation (when create = true)!
- 2004-01-20: serializer: fix CR, LF, TAB and chars <32 in attribute value escaping
- 2004-01-20: added support for http://xmlpull.org/v1/doc/properties.html#location
- 2004-01-20: serializer will escape chars < 32 expect for TAB (9) and NL (10) that are passed unchanged
- added to build.xml `target="1.1"` for parser/serializer related targets to make sure that compiled code can work with JDK 1.1 (as described in ANT Javac Task documentation: (...) Generate class files for specific VM version (e.g., 1.1 or 1.2). Note that the default value depends on the JVM that is running Ant. In particular, if you use JDK 1.4 the generated classes will not be usable for a 1.1 Java VM unless you explicitly set this attribute to the value 1.1 (which is the default value for JDK 1.1 to 1.3).
- XB1: fixed problem with no respecting element prefix when serializing - it works but there is some improvement possible when XmlSerializer is fixed see issue report (bug 169) for details
- XB1: added to XmlElement methods requiredElementContent() and requiredTextContent() to simplify SOAP like processing
- XB1: modified XmlSerializable to throw IOException
- added getWriter() to MXSerializer so it can be accessed by casting XmlSerializer (if somebody really needs it)
- RC5 fixed bug 160: text() should make sure to escape "]]>"
- allow user to decide what kind of quotation is used in document prolog <?xml by checking value of FEATURE_SERIALIZER_ATTVALUE_USE_APOSTROPHE
- RC3 fixed bug 148: two bugs in CDSECT handling: not marking it as PCDATA and incorrect normalization
- RC2 fixed bug 147: bug with parsing entity reference if it is sole element content
- RC1 fixed bug 146: bug in CDATA parsing (]] <)
- extended XB1 builder to allow serializing Collections as containers for children
- added DOM2 builder add-on from XmlPull add-ons
- changed XmlElement lookupNamespace to check parent for namespace declarations
- more strict checking that namespace name passed to XmlSerializer.getPrefix() is not null and not empty

### 2003-07-01 (XPP3_1_1_3_3)

- improved error diagnostics in exception especially greatly improved in case when start tag is not closed (possibly lot of lines later ...) (described in Bug 128 except for XB1 XPath locations)
- fixed [Bug 134] Comment handling: greater than eaten inside comments: parseComment() (and parsePI()) was incorrectly not copying normalized chars from input buffer to buffer with normalized content for >, this was happening only when EOL normalization was triggered by \r\n ... (reported by Jean-Paul Finne)

### 2003-03-09 (XPP3_1_1_2a)

- fixed bug in MXParser that make it report comment/PI as element content from next() if comment or PI was directly after start tag (reported by Henry Minsky)
- implemented optional formatting properties for XmlSerializer to allow pretty printing of XML output (indent, new lines, quotation character used for attribute values) for details see RFE (bug 50)
- fixed bug in MXParser.processPI that prevented it from properly reporting processing instruction that had just target, example `<?target?>`
- updated XmlPullWrapper to have methods to extract PI target and data and added Junit tests

### 2002-10-06 (XPP3_1_1_2)

- fixed ROUNDTRIP bug reported by Pace Jim that made MXP1 to report instead of start tag (getText()) just attribute value when value contained entity reference (and PC was generated)
- rewritten CDATA handling to do normalization when combined as TEXT by next()
- fixed bug in nextImpl() that kept pointer to pos with using bufAbsoluteOffset resulting in corruption of output (reported by M?ns af Klercker)

### 2002-08-27 (XPP3_1_1_1)

- implements XmlPull API 1.1.1 including XmlSerializer, updated samples and tests (including tests described in XML)
- better diagnostic messages
- fixed bug in CDSECT parsing that ignored CDATA content if CDEXT was directly after tag ...
- fixed bug with character entities that were using hex digits.

### 2002-04-24 (XPP3_1_0_8a)

- fixed bug with parsing attribute value if & is first character

### 2002-04-24 (XPP3_1_0_8)

- mainly support for correct depth of END_TAG - the same as START_TAG
- MXP1 is now fully integrated with XPP3 for better or worse ...

### 2002-04-23 (XPP3_MXP1_BETA3)

- internal release only: tracking progress of XMLPULL API changes

### 2002-04-21 (XPP3_MXP1_BETA2)

- fixed bug in namespace handling for empty elements (did not unwind namespace stack) reported by Toivo Lainevool

### 2002-04-16 (XPP3_MXP1_BETA1)

- this release contains a brand new redesigned for performance XML parsing engine called MXP1, for more details visit MXP1 website http://www.extreme.indiana.edu/xgws/xsoap/xpp/mxp1/

### 2002-04-07 (XPP3_1_0_7_1)

- reorganized build structure to include XMLPULL API, samples, and tests source to make it easier for users to build and use XPP3; jar file will include now XMLPULL API as well
- removed Xpp3Factory and now parser class i directly created by XmlPullParserFactory
- updated to XMLPULL API version 1.0.7.1

### 2002-04-07 (XPP3_1_0_7)

- updated to XMLPULL API version 1.0.7

### 2002-04-06 (XPP3_1_0_6)

- updated to XMLPULL API version 1.0.6

### 2002-03-30 (XPP3_1_0_5)

- first official release (passes all XMLPULL 1.0.5 API TESTS)

### 2002-03-25

- internal release