The Castor project has been developed out of need: the need to get stuff done and the need to write useful code.

It has been designed and coded over many cups of Dunkin Donut's Hazlenut coffee, Starbuck's Latte, and tall no-whip White Mochas, as proof that coffee beans do come in handy.

Castor includes software, such as Xerces, Jakarta ORO, and Jakarta Regexp, developed by the Apache Software Foundation. Castor also includes JUnit testing framework

Here are some key features of "Castor":
Castor XML: Java object model to and from XML (XML databinding)
Generate source code from an XML Schema
Default introspection or mapping file for existing object models
Castor JDO: Java object persistence to RDBMS Castor JDO is not the same-as or compatible with Sun's JDO. We have a different approach to handling data object to RDBMS mappings.
XML-based mapping file to specify bindings for existing object models
Support for schema-less Java to XML binding
In memory caching and write-at-commit reduces JDBC operations
Two phase commit transactions, object rollback and deadlock detection
OQL query mapping to SQL queries
EJB container managed persistence provider for OpenEJB
Ability to create base mapping from existing Java classes
Ability to create an XML Schema from an XML input document

What's New in This Release:
Fixed problem with TransactionContext.getObjectEntry(Object) that was introduced as a result of adding support for lazy loading 1:1 relations.
Added F.A.Q. entry describing compatibility problems between various releases of mySQL 4.1.x and its JDBC drivers.
Reverted various DOCTYPE definitions in src/tests/jdo to use DTDs.
Fixed issue with GeneralizedFieldHandler not able to handle collections. Collections are now automatically iterated over during getValue() calls and each item in the collection is passed into the convertUponGet method. To retain the old behavior simply add a call to #setCollectionIteration with a value of false in the constructor of your GeneralizedFieldHandler. The behavior for setter methods is not changed since only one item at a time is passed into the setter already.
Fixed whitespace processing bug, where a ' ' was actually getting appended to the end of a string value if the parser was calling the #characters method again with only whitespace following a previous call to #characters method where valid content existed.
Fixed recent issue where ElementDecl#getType() method was always returning null for element references.