BeanWriter
outputs beans as XML to an io stream.
The output for each bean is an xml fragment (rather than a well-formed xml-document). This allows bean representations to be appended to a document by writing each in turn to the stream. So to create a well formed xml document, you'll need to write the prolog to the stream first. If you append more than one bean to the stream, then you'll need to add a wrapping root element as well.
The line ending to be used is set by {@link #setEndOfLine}.
The output can be formatted (with whitespace) for easy reading by calling {@link #enablePrettyPrint}. The output will be indented. The indent string used is set by {@link #setIndent}.
Bean graphs can sometimes contain cycles. Care must be taken when serializing cyclic bean graphs since this can lead to infinite recursion. The approach taken by BeanWriter
is to automatically assign an ID
attribute value to beans. When a cycle is encountered, an element is written that has the IDREF
attribute set to the id assigned earlier.
The names of the ID
and IDREF
attributes used can be customized by the XMLBeanInfo
. The id's used can also be customized by the user via IDGenerator
subclasses. The implementation used can be set by the IdGenerator
property. BeanWriter defaults to using SequentialIDGenerator
which supplies id values in numeric sequence.
If generated ID
attribute values are not acceptable in the output, then this can be disabled by setting the WriteIDs
property to false. If a cyclic reference is encountered in this case then a CyclicReferenceException
will be thrown. When the WriteIDs
property is set to false, it is recommended that this exception is caught by the caller.
@author James Strachan
@author Martin van den Bemt