Long Term Persistence

Long-term persistence is a model that enables beans to be saved in XML format.

Information on the XML format and on how to implement long-term persistence for non-beans can be found in XML Schema and Using XMLEncoder .

Encoder and Decoder

The XMLEncoder class is assigned to write output files for textual representation of Serializable objects. The following code fragment is an example of writing a Java bean and its properties in XML format:

XMLEncoder encoder = new XMLEncoder(
           new BufferedOutputStream(
           new FileOutputStream("Beanarchive.xml")));


The XMLDecoder class reads an XML document that was created with XMLEncoder:

XMLDecoder decoder = new XMLDecoder(
    new BufferedInputStream(
    new FileInputStream("Beanarchive.xml")));

Object object = decoder.readObject();

What's in XML?

An XML bean archive has its own specific syntax, which includes the following tags to represent each bean element:

  • an XML preamble to describe a version of XML and type of encoding
  • a <java> tag to embody all object elements of the bean
  • an <object> tag to represent a set of method calls needed to reconstruct an object from its serialized form
    <object class="javax.swing.JButton" method="new">
    or statements
    <object class="javax.swing.JButton">
        <void method="setText">
  • tags to define appropriate primitive types:
    • <boolean>
    • <byte>
    • <char>
    • <short>
    • <int>
    • <long>
    • <float>
    • <double>
  • a <class> tag to represent an instance of Class.
  • an <array> tag to define an array
    <array class="java.lang.String" length="5">

The following code represents an XML archive that will be generated for the SimpleBean component:

<?xml version="1.0" encoding="UTF-8" ?>
  <object class="javax.swing.JFrame">
    <void method="add">
      <object class="java.awt.BorderLayout" field="CENTER"/>
      <object class="SimpleBean"/>
    <void property="defaultCloseOperation">
      <object class="javax.swing.WindowConstants" field="DISPOSE_ON_CLOSE"/>
    <void method="pack"/>
    <void property="visible">