public class XMLEncoder extends Encoderimplements AutoCloseable
XMLEncoder class is a complementary alternative to the
ObjectOutputStream and can used to generate a textual representation of a
JavaBean in the same way that the
ObjectOutputStream can be used to create binary representation of
Serializable objects. For example, the following fragment can be used to create a textual representation the supplied
JavaBean and all its properties:
XMLEncoder e = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream("Test.xml")));
e.writeObject(new JButton("Hello, world"));
e.close();
Despite the similarity of their APIs, the
XMLEncoder class is exclusively designed for the purpose of archiving graphs of
JavaBeans as textual representations of their public properties. Like Java source files, documents written this way have a natural immunity to changes in the implementations of the classes involved. The
ObjectOutputStream continues to be recommended for interprocess communication and general purpose serialization.
The XMLEncoder class provides a default denotation for JavaBeans in which they are represented as XML documents complying with version 1.0 of the XML specification and the UTF-8 character encoding of the Unicode/ISO 10646 character set. The XML documents produced by the XMLEncoder class are:
XMLEncoder class uses a redundancy elimination algorithm internally so that the default values of a Bean's properties are not written to the stream. Below is an example of an XML archive containing some user interface components from the swing toolkit:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.0" class="java.beans.XMLDecoder">
<object class="javax.swing.JFrame">
<void property="name">
<string>frame1</string>
</void>
<void property="bounds">
<object class="java.awt.Rectangle">
<int>0</int>
<int>0</int>
<int>200</int>
<int>200</int>
</object>
</void>
<void property="contentPane">
<void method="add">
<object class="javax.swing.JButton">
<void property="label">
<string>Hello</string>
</void>
</object>
</void>
</void>
<void property="visible">
<boolean>true</boolean>
</void>
</object>
</java>
The XML syntax uses the following conventions:
Although all object graphs may be written using just these three tags, the following definitions are included so that common data structures can be expressed more concisely:
Integer class could be written: <int>123</int>. Note that the XMLEncoder class uses Java's reflection package in which the conversion between Java's primitive types and their associated "wrapper classes" is handled internally. The API for the XMLEncoder class itself deals only with Objects. For more information you might also want to check out Using XMLEncoder, an article in The Swing Connection.
XMLDecoder,
ObjectOutputStream
| Constructor and Description |
|---|
XMLEncoder(OutputStream
Creates a new XML encoder to write out
JavaBeans to the stream
out using an XML encoding.
|
XMLEncoder(OutputStream
Creates a new XML encoder to write out
JavaBeans to the stream
out using the given
charset starting from the given
indentation.
|
| Modifier and Type | Method and Description |
|---|---|
void |
close()
This method calls
flush, writes the closing postamble and then closes the output stream associated with this stream.
|
void |
flush()
This method writes out the preamble associated with the XML encoding if it has not been written already and then writes out all of the values that been written to the stream since the last time
flush was called.
|
Object |
getOwner()
Gets the owner of this encoder.
|
void |
setOwner(Object
Sets the owner of this encoder to
owner.
|
void |
writeExpression(Expression
Records the Expression so that the Encoder will produce the actual output when the stream is flushed.
|
void |
writeObject(Object
Write an XML representation of the specified object to the output.
|
void |
writeStatement(Statement
Records the Statement so that the Encoder will produce the actual output when the stream is flushed.
|
get, getExceptionListener, getPersistenceDelegate, remove, setExceptionListener, setPersistenceDelegatepublic XMLEncoder(OutputStreamout)
out using an XML encoding.
out - the stream to which the XML representation of the objects will be written
IllegalArgumentException - if
out is
null
XMLDecoder.XMLDecoder(InputStream)
public XMLEncoder(OutputStreamout, String charset, boolean declaration, int indentation)
out using the given
charset starting from the given
indentation.
out - the stream to which the XML representation of the objects will be written
charset - the name of the requested charset; may be either a canonical name or an alias
declaration - whether the XML declaration should be generated; set this to
false when embedding the contents in another XML document
indentation - the number of space characters to indent the entire XML document by
IllegalArgumentException - if
out or
charset is
null, or if
indentation is less than 0
IllegalCharsetNameException - if
charset name is illegal
UnsupportedCharsetException - if no support for the named charset is available in this instance of the Java virtual machine
UnsupportedOperationException - if loaded charset does not support encoding
Charset.forName(String)
public void setOwner(Objectowner)
owner.
owner - The owner of this encoder.
getOwner()
public ObjectgetOwner()
setOwner(java.lang.Object)
public void writeObject(Objecto)
writeObject in class
Encoder
o - The object to be written to the stream.
XMLDecoder.readObject()
public void writeStatement(StatementoldStm)
This method should only be invoked within the context of initializing a persistence delegate.
writeStatement in class
Encoder
oldStm - The statement that will be written to the stream.
PersistenceDelegate.initialize(java.lang.Class<?>, java.lang.Object, java.lang.Object, java.beans.Encoder)
public void writeExpression(ExpressionoldExp)
This method should only be invoked within the context of initializing a persistence delegate or setting up an encoder to read from a resource bundle.
For more information about using resource bundles with the XMLEncoder, see http://java.sun.com/products/jfc/tsc/articles/persistence4/#i18n
writeExpression in class
Encoder
oldExp - The expression that will be written to the stream.
PersistenceDelegate.initialize(java.lang.Class<?>, java.lang.Object, java.lang.Object, java.beans.Encoder)
public void flush()
flush was called. After flushing, all internal references to the values that were written to this stream are cleared.
public void close()
flush, writes the closing postamble and then closes the output stream associated with this stream.