TODO list

The following is a list of items that need to be completed in Betwixt. Contributions are welcome!

For 1.0 Alpha 1 Release

  • Add strategy documentation. This needs to be added to the main documentation. Example code needs to be created. This code can also be used for more test cases.
  • Add description of digester-related limitation to FAQ
  • Create DTD for .betwixt files.
  • Add XMLIntrospector Setting Documentation. Add documentation about the XMLIntrospector settings to main documentation. Make sure that warnings are added about consequences of changing settings.
  • Add XMLRegistry documentation. Add documentation about XMLRegistry to main documentation.
  • Improve Java Docs. Go through java docs, add any which are missing, correct any mistakes etc.
  • Test Against Powered By Projects. Make sure release works with maven and scarab.

High priority

  • BeanWriter is writing too sloppy (empty elements, etc). Fixing it in a clean way is almost impossible. Probably a refactor is best anyway to have a less "sloppy" api..
  • Get an overview of what .betwixt files should really do. Especially more complicated examples will cause very strange and unexpected results.
  • If an addFoo() method is found with no matching getFoos() then a warning should be generated.
  • Consider allowing the parsing of XML to order the properties/elements in the XMLBeanInfo so that when the XML is output again it follows the same XML ordering again. There is an example describing this here . For example we could add a feature to parse the DTD and order the XMLBeanInfo according to the order in the DTD.
  • Improved documentation! Improve package level documentation so that new developers can get up to speed more quickly. Ensure all betwixt features have good user documentation. More good code examples.
  • Add support for IDREF's to BeanReader. At the moment, round tripping break when cycles exist.
  • Add testcase for the BeanReader(SAXParser) and BeanReader(XMLReader). They should behave the same in all cases.
  • Create test cases based on real xml examples. This should help to shake out any problems and help to find out how the design can be improved. These should also be used as a basis for improved documentation.
  • Improve internal design. Betwixt is hard to understand and hard to create patches for. An improved internal design would help more people to contribute.
  • Improve test coverage. Run test coverage tool and improve coverage of key functionality.
  • Allow customization for update from .betwixt file Add updater attribute that allows the updater to be specified for an elements. This should also allow updaters to be ignored for certain properties.

Medium priority

  • Handle empty elements better. Add option not to write empty elements. This is required to correctly write some kinds of xml. The RSS full round tripping will only work with this functionality.
  • Create design documentation This will help people understand the betwixt design.
  • Add verification for all xml writing tests. At the moment, most of the xml writing tests do not test the output fully. Need to add comparisons against reference xml documents.
  • Improve mapping for swing components Swing classes have lots and lots of properties. Java 1.4 does a better job of persistance than betwixt for class that have lots of properties.
  • Binary Data Elements Some properties should not be treated as beans and therefore mapped to a element graph. These should be converted to body text of binary data. A mechanism similar to BeanUtils.ConvertUtils might work. For example, if you have a colormodel that get's written (an array with a lot of numbers and an xml-element per array element) betwixt will spend ages converting it bit by bit.
  • Improved Support For Interfaces
  • Customizable ID/IDREF Mapping Add per element customization for ID/IDREF mappings. Extra attributes will be added to .betwixt file that specify the ID/IDREF names.

Low priority

  • Create a W3C DOM implementation that acts as a facade on top of beans to allow beans to be transformed in XSLT engines as XML.
  • Add support for custom class loaders. Probably this means adding a classloader property to XMLIntrospector and then ensuring all class creation uses that. The digestion rules which create the XMLBeanInfo from .betwixt files should use the XMLBeanInfoDigester classloader property which should be set by the XMLIntrospector .
  • Improve integration with digester. At the moment, bean reading is all or nothing. You either use betwixt to do everything or you use digester to specify rules. It'd be nice to be able to mix and match.
  • Create utility methods in BeanWriter to write stuff like prologs and doctype definitions to the stream.
  • Create a funky image for the betwixt home page.

Completed (Since Last Release)

  • Fixed Using \n as default and now shows a warning when an invalid space character is used.

    Adding a check to only accept valid characters as lineEndings, so parsers actually won't choke on the output xml. BeanWriter should have a setEndOfLine() method to allow configurable EOL strings, defaulting to "\n"
  • Create a SAXWriter class in the io package that takes a bean and writes to a SAX ContentHandler rather that outputting textual XML like BeanWriter does. This will allow Betwixt to work nicely in XML pipelining environments like Cocoon and Jelly.
  • Fixed. digester.peek() was giving warning. Now checking if it still has something to peek. Currently betwixt causes digester to output a warning '[WARN] Digester - -Empty stack (returning null)'. We should patch the way betwixt uses digester to avoid this warning message.