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, java.io.ObjectOutputStream
| Modifier and Type | Class and Description |
|---|---|
| private static class |
| Modifier and Type | Field and Description |
|---|---|
| private final String | |
| private final boolean | |
| private final CharsetEncoder | |
| private int | |
| private boolean | |
| private NameGenerator | |
| private OutputStreamWriter | |
| private Object | |
| private boolean | |
| private Map | |
| private Map |
| Access | Constructor and Description |
|---|---|
| public | XMLEncoder(OutputStream
the stream to which the XML representation of
the objects will be written out)Creates a new XML encoder to write out JavaBeans
to the stream |
| public | XMLEncoder(OutputStream
the stream to which the XML representation of
the objects will be written out, String the name of the requested charset;
may be either a canonical name or an alias charset, boolean whether the XML declaration should be generated;
set this to declaration, int false
when embedding the contents in another XML documentthe number of space characters to indent the entire XML document by indentation)Creates a new XML encoder to write out JavaBeans
to the stream |
| Modifier and Type | Method and Description |
|---|---|
| pack-priv void | |
| public void | close()
Implements java. This method calls |
| private static String | |
| private String | |
| public 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 |
| pack-priv Statement | |
| public Object | |
| private XMLEncoder. | |
| private static boolean | Returns: true if the Unicode code point is valid,
false otherwisethe 32-bit Unicode code point being tested code)Returns |
| private void | |
| private void | |
| private void | |
| private void | |
| private void | |
| pack-priv static Class | |
| private String | |
| private static String | |
| public void | |
| private List | |
| public void | writeExpression(Expression
The expression that will be written
to the stream. oldExp)Overrides java. Records the Expression so that the Encoder will produce the actual output when the stream is flushed. |
| private void | |
| public void | writeObject(Object
The object to be written to the stream. o)Overrides java. Write an XML representation of the specified object to the output. |
| public void | writeStatement(Statement
The statement that will be written
to the stream. oldStm)Overrides java. Records the Statement so that the Encoder will produce the actual output when the stream is flushed. |
| charset | back to summary |
|---|---|
| private final String charset | |
| declaration | back to summary |
|---|---|
| private final boolean declaration | |
| encoder | back to summary |
|---|---|
| private final CharsetEncoder encoder | |
| indentation | back to summary |
|---|---|
| private int indentation | |
| internal | back to summary |
|---|---|
| private boolean internal | |
| nameGenerator | back to summary |
|---|---|
| private NameGenerator nameGenerator | |
| out | back to summary |
|---|---|
| private OutputStreamWriter out | |
| owner | back to summary |
|---|---|
| private Object owner | |
| preambleWritten | back to summary |
|---|---|
| private boolean preambleWritten | |
| targetToStatementList | back to summary |
|---|---|
| private Map<Object, List<Statement>> targetToStatementList | |
| valueToExpression | back to summary |
|---|---|
| private Map<Object, XMLEncoder. | |
| XMLEncoder | back to summary |
|---|---|
| public XMLEncoder(OutputStream out) Creates a new XML encoder to write out JavaBeans
to the stream
| |
| XMLEncoder | back to summary |
|---|---|
| public XMLEncoder(OutputStream out, String charset, boolean declaration, int indentation) Creates a new XML encoder to write out JavaBeans
to the stream
| |
| clear | back to summary |
|---|---|
| pack-priv void clear() Overrides java.
| |
| close | back to summary |
|---|---|
| public void close() Implements java. This method calls
| |
| createString | back to summary |
|---|---|
| private static String createString(int code) | |
| createString | back to summary |
|---|---|
| private String createString(String string) | |
| flush | back to summary |
|---|---|
| public 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 | |
| getMissedStatement | back to summary |
|---|---|
| pack-priv Statement getMissedStatement() | |
| getOwner | back to summary |
|---|---|
| public Object getOwner() Gets the owner of this encoder. | |
| getValueData | back to summary |
|---|---|
| private XMLEncoder. | |
| isValidCharCode | back to summary |
|---|---|
| private static boolean isValidCharCode(int code) Returns
| |
| mark | back to summary |
|---|---|
| private void mark(Object o, boolean isArgument) | |
| mark | back to summary |
|---|---|
| private void mark(Statement stm) | |
| outputStatement | back to summary |
|---|---|
| private void outputStatement(Statement exp, Object outer, boolean isArgument) | |
| outputValue | back to summary |
|---|---|
| private void outputValue(Object value, Object outer, boolean isArgument) | |
| outputXML | back to summary |
|---|---|
| private void outputXML(String tag, String attributes, Object value, Object... args) | |
| primitiveTypeFor | back to summary |
|---|---|
pack-priv static Class
| |
| quote | back to summary |
|---|---|
| private String quote(String s) | |
| quoteCharCode | back to summary |
|---|---|
| private static String quoteCharCode(int code) | |
| setOwner | back to summary |
|---|---|
| public void setOwner(Object owner) Sets the owner of this encoder to | |
| statementList | back to summary |
|---|---|
| private List | |
| writeExpression | back to summary |
|---|---|
| public void writeExpression(Expression oldExp) Overrides java. Records the Expression so that the Encoder will produce the actual output when the stream is flushed. 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 Creating Internationalized Applications,
| |
| writeln | back to summary |
|---|---|
| private void writeln(String exp) | |
| writeObject | back to summary |
|---|---|
| public void writeObject(Object o) Overrides java. Write an XML representation of the specified object to the output.
| |
| writeStatement | back to summary |
|---|---|
| public void writeStatement(Statement oldStm) Overrides java. Records the Statement so that the Encoder will produce the actual output when the stream is flushed. This method should only be invoked within the context of initializing a persistence delegate.
| |
| Modifier and Type | Field and Description |
|---|---|
| public Expression | |
| public boolean | |
| public String | |
| public int |
| Access | Constructor and Description |
|---|---|
| private |
| exp | back to summary |
|---|---|
| public Expression exp | |
| marked | back to summary |
|---|---|
| public boolean marked | |
| name | back to summary |
|---|---|
| public String name | |
| refs | back to summary |
|---|---|
| public int refs | |
| ValueData | back to summary |
|---|---|
| private ValueData() | |