public abstract class XMLFormat<T> extends Object
This class represents the format base class for XML serialization and deserialization.
Instances of this class are typically retrieved from the
XMLContext
(OSGi service or not).
@Format(xml=GraphicXML.class) public abstract class Graphic implements XMLSerializable { private boolean isVisible; private Paint paint; // null if none. private Stroke stroke; // null if none. private Transform transform; // null if none. // XML format with positional associations (members identified by their position), // see XML package description for examples of name associations. public static class GraphicXML extends XMLFormat<Graphic> { public void write(Graphic g, OutputElement xml) { xml.setAttribute("isVisible", g.isVisible); xml.add(g.paint); // First. xml.add(g.stroke); // Second. xml.add(g.transform); // Third. } public void read(InputElement xml, Graphic g) { g.isVisible = xml.getAttribute("isVisible", true); g.paint = xml.getNext(); g.stroke = xml.getNext(); g.transform = xml.getNext(); return g; } }; }
Due to the sequential nature of XML serialization/deserialization, formatting/parsing of XML attributes should always be performed before formatting/parsing of the XML content.
The mapping between classes and XML formats can be overriden
through XMLBinding
instances.
Here is an example of serialization/deserialization:
// Creates a list holding diverse objects. List list = new ArrayList(); list.add("John Doe"); list.add(null); Map map = new FastMap(); map.put("ONE", 1); map.put("TWO", 2); list.add(map); // Use of custom binding. XMLBinding binding = new XMLBinding(); binding.setAlias(FastMap.class, "Map"); binding.setAlias(String.class, "String"); binding.setAlias(Integer.class, "Integer"); // Formats the list to XML . OutputStream out = new FileOutputStream("C:/list.xml"); XMLObjectWriter writer = new XMLObjectWriter().setOutput(out).setBinding(binding); writer.write(list, "MyList", ArrayList.class); writer.close();
list.xml
document produced:<MyList> <String value="John Doe"/> <Null/> <Map> <Key class="String" value="ONE"/> <Value class="Integer" value="1"/> <Key class="String" value="TWO"/> <Value class="Integer" value="2"/> </Map> </MyList>
// Reads back to a FastTable instance. InputStream in = new FileInputStream("C:/list.xml"); XMLObjectReader reader = new XMLObjectReader().setInput(in).setBinding(binding); FastTable table = reader.read("MyList", FastTable.class); reader.close();
Note: Any type for which a text format
is
defined can be represented as a XML attribute.
Modifier and Type | Class and Description |
---|---|
static class |
XMLFormat.Default
Returns the default XML format for any object having a
plain text format ; this XML representation consists
of the plain text representation of the object as a "value" attribute. |
static class |
XMLFormat.InputElement
This class represents an input XML element (unmarshalling).
|
static class |
XMLFormat.OutputElement
This class represents an output XML element (marshalling).
|
Modifier | Constructor and Description |
---|---|
protected |
XMLFormat()
Default constructor.
|
Modifier and Type | Method and Description |
---|---|
boolean |
isReferenceable()
Indicates if the object serialized through this format can be referenced
to (default
true ). |
T |
newInstance(Class<? extends T> cls,
XMLFormat.InputElement xml)
Allocates a new object of the specified class from the specified
XML input element.
|
abstract void |
read(XMLFormat.InputElement xml,
T obj)
Parses an XML input element into the specified object.
|
abstract void |
write(T obj,
XMLFormat.OutputElement xml)
Formats an object into the specified XML output element.
|
public boolean isReferenceable()
true
). This method can be overriden to return
false
if serialized objects are manipulated "by value".true
if serialized object may hold a reference;
false
otherwise.XMLReferenceResolver
public T newInstance(Class<? extends T> cls, XMLFormat.InputElement xml) throws XMLStreamException
cls
- the class of the object to return.xml
- the XML input element.XMLStreamException
public abstract void write(T obj, XMLFormat.OutputElement xml) throws XMLStreamException
obj
- the object to format.xml
- the XMLElement
destination.XMLStreamException
public abstract void read(XMLFormat.InputElement xml, T obj) throws XMLStreamException
xml
- the XML element to parse.obj
- the object created through newInstance(java.lang.Class<? extends T>, javolution.xml.XMLFormat.InputElement)
and to setup from the specified XML element.XMLStreamException
Copyright © 2005-2013 Javolution. All Rights Reserved.