Class PersistenceService
- java.lang.Object
-
- org.zkoss.chart.lic.xml.PersistenceService
-
public class PersistenceService extends Object
Provides a collection of static methods to support comfortable loading and storing of objects as XML data.This class uses the classes
XMLEncoder
andXMLDecoder
to encode and decode an object to and from an XML file for long term persistence. It allows you to provide customPersistenceDelegate
instances for the serialisation of any classes which do not implement the JavaBean design pattern and are not supported byXMLEncoder
as a default.For the latter case,
PersistenceService
offers thesetPersistenceDelegate(Class, PersistenceDelegate)
method which could be called from a static initialiser block in the class which would like to usePersistenceService
'sstore
andload
methods.Note that the Java API already provides some default persistence delegates for some classes of its API which are not JavaBeans. If in doubt, simply test the class before writing a custom
PersistenceDelegate
. If you see exceptions happening, you most probably need to provide aPersistenceDelegate
and use thesetPersistenceDelegate
method to install it.Note that the store and load methods in this class have been designed to deal with any kind of
Throwable
s throughout the course of (de)serialisation, evenOutOfMemoryError
s.This class is designed to be thread safe, i.e. when an object is persistet, it is put into a
synchronized (object) { ... }
block.- Author:
- Christian Schlichtherle
- See Also:
XMLEncoder
,XMLDecoder
,PersistenceDelegate
,DefaultPersistenceDelegate
, Sun Developer Network Site: Using XMLEncoder
-
-
Field Summary
Fields Modifier and Type Field Description static int
BUFSIZE
The buffer size for I/O used in the store and load methods.static int
DEFAULT_BUFSIZE
10KB - the default buffer size for buffered I/O.static String
XML_CHARSET
"UTF-8"
- the character encoding used byXMLEncoder
andXMLDecoder
.
-
Constructor Summary
Constructors Modifier Constructor Description protected
PersistenceService()
You cannot instantiate this class.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description protected static void
installPersistenceDelegates(Encoder encoder)
Installs all persistence delegates registered via{@link #setPersistenceDelegate(Class, PersistenceDelegate)}
inencoder
.static Object
load(byte[] encoded)
Loads a single object, which may form the root of an entire object graph, from XML content in the UTF-8 encoded byte arrayencoded
.static Object
load(File file)
Loads a single object, which may form the root of an entire object graph, from XML content in the given filefile
.static Object
load(InputStream xmlIn)
Loads a single object, which may form the root of an entire object graph, from XML content in the given input streamxmlIn
.static Object
load(String encoded)
Loads a single object, which may form the root of an entire object graph, from XML content in the stringencoded
.static void
setPersistenceDelegate(Class<?> clazz, PersistenceDelegate persistenceDelegate)
Associates aPersistenceDelegate
to the given classtype
.static void
store(Object root, File file)
Stores the objectroot
, which may form the root of an entire object graph, as XML content to the filefile
for long term persistence.static void
store(Object root, OutputStream xmlOut)
Stores the objectroot
, which may form the root of an entire object graph, as XML content to the output streamxmlOut
for long term persistence.static byte[]
store2ByteArray(Object root)
Stores the objectroot
, which may form the root of an entire object graph, as XML content into a UTF-8 encoded byte array for long term persistence.static String
store2String(Object root)
Stores the objectroot
, which may form the root of an entire object graph, as XML content into a string for long term persistence.
-
-
-
Field Detail
-
BUFSIZE
public static int BUFSIZE
The buffer size for I/O used in the store and load methods. You may customise this to your needs - the default isDEFAULT_BUFSIZE
.
-
XML_CHARSET
public static final String XML_CHARSET
"UTF-8"
- the character encoding used byXMLEncoder
andXMLDecoder
.- See Also:
- Constant Field Values
-
DEFAULT_BUFSIZE
public static final int DEFAULT_BUFSIZE
10KB - the default buffer size for buffered I/O.- See Also:
- Constant Field Values
-
-
Method Detail
-
setPersistenceDelegate
public static final void setPersistenceDelegate(Class<?> clazz, PersistenceDelegate persistenceDelegate)
Associates aPersistenceDelegate
to the given classtype
.This must be called prior to the
store
methods for each class which's instances are to be persisted. Thus, the best place to put this call in is a static initializer block for the corresponding class.Here is an example:
class PersistentObject { static { PersistenceService.setPersistenceDelegate( PersistentObject.class, new DefaultPersistenceDelegate( new String[] { "property" })); } public int property; public PersistentObject(int property) { this.property = property; } }
Note that you should not use this method for any class which's source code you can control. The preferred way to associate a persistence delegate with a class is to write a
BeanInfo
class which'sBeanDescriptor
has an attribute set with"persistenceDelegate"
as its name and the respective persistence delegate as its value (seeEncoder.getPersistenceDelegate(java.lang.Class<?>)
). However, this method is still useful in case you can't control the source code, as then at least you can still associate a persistence delegate to this class.- See Also:
XMLEncoder
,PersistenceDelegate
,DefaultPersistenceDelegate
-
installPersistenceDelegates
protected static void installPersistenceDelegates(Encoder encoder)
Installs all persistence delegates registered via{@link #setPersistenceDelegate(Class, PersistenceDelegate)}
inencoder
.- Parameters:
encoder
- The encoder - may not benull
.- Throws:
RuntimeException
- ifencoder
isnull
.
-
store
public static void store(Object root, OutputStream xmlOut) throws NullPointerException, PersistenceServiceException
Stores the objectroot
, which may form the root of an entire object graph, as XML content to the output streamxmlOut
for long term persistence.Please note the following:
- This method will not tolerate any I/O or other serialisation exceptions!
- The underlying stream is always closed (even if an exception is thrown).
- Parameters:
root
- The object to store - may benull
.xmlOut
- The unbuffered stream to output the XML content - may not benull
.- Throws:
NullPointerException
- IfxmlOut
is }null}.PersistenceServiceException
- If any throwable was thrown during serialisation. Its cause is always set.
-
store
public static void store(Object root, File file) throws NullPointerException, PersistenceServiceException
Stores the objectroot
, which may form the root of an entire object graph, as XML content to the filefile
for long term persistence. This method supports writing to a file located in a ZIP or JAR file.Please note the following:
- This method will not tolerate any I/O or other serialisation exceptions!
- This is a transaction, i.e. the method either completely succeeds with saving the file or the file is restored to its original state.
- Parameters:
root
- The object to store - may benull
.file
- The file to output the XML content to - may not benull
.- Throws:
NullPointerException
- Iffile
is }null}.PersistenceServiceException
- If any throwable was thrown during serialisation. Its cause is always set.
-
store2ByteArray
public static byte[] store2ByteArray(Object root) throws PersistenceServiceException
Stores the objectroot
, which may form the root of an entire object graph, as XML content into a UTF-8 encoded byte array for long term persistence.Please note the following:
- This method will not tolerate any I/O or other serialisation exceptions!
- Parameters:
root
- The object to store - may benull
.- Returns:
- The XML with UTF-8 charset encoded byte array
representation of
root
-null
is never returned. - Throws:
PersistenceServiceException
- If any throwable was thrown during serialisation. Its cause is always set.
-
store2String
public static String store2String(Object root) throws PersistenceServiceException
Stores the objectroot
, which may form the root of an entire object graph, as XML content into a string for long term persistence.Please note the following:
- This method will not tolerate any I/O or other serialisation exceptions!
- Parameters:
root
- The object to store - may benull
.- Returns:
- The XML string encoded representation of
root
-null
is never returned. - Throws:
PersistenceServiceException
- If any throwable was thrown during serialisation. Its cause is always set.
-
load
public static Object load(InputStream xmlIn) throws NullPointerException, PersistenceServiceException
Loads a single object, which may form the root of an entire object graph, from XML content in the given input streamxmlIn
.Please note the following:
- The stream is connected to a new
BufferedInputStream
withBUFSIZE
as its buffer size and is always closed (even if an exception is thrown). - This method will not tolerate any I/O or other deserialisation exceptions!
- Parameters:
xmlIn
- The unbuffered stream to input the XML content - may not benull
.- Returns:
- The root of the loaded object graph - may be
null
. - Throws:
NullPointerException
- IfxmlIn
isnull
.PersistenceServiceException
- If any throwable was thrown during serialisation. Its cause is always set.
- The stream is connected to a new
-
load
public static Object load(File file) throws NullPointerException, PersistenceServiceException
Loads a single object, which may form the root of an entire object graph, from XML content in the given filefile
.Please note the following:
- This method will not tolerate any I/O or other deserialisation exceptions!
- Parameters:
file
- The file to load the XML content from - may not benull
.- Returns:
- The root of the loaded object graph - may be
null
. - Throws:
NullPointerException
- Iffile
isnull
.PersistenceServiceException
- If any throwable was thrown during serialisation. Its cause is always set.
-
load
public static Object load(byte[] encoded) throws NullPointerException, PersistenceServiceException
Loads a single object, which may form the root of an entire object graph, from XML content in the UTF-8 encoded byte arrayencoded
.Please note the following:
- This method will not tolerate any I/O or other deserialisation exceptions!
- Parameters:
encoded
- The XML with UTF-8 charset encoded byte array representation of the root of an object graph - may not benull
.- Returns:
- The root of the loaded object graph - may be
null
. - Throws:
NullPointerException
- Ifencoded
isnull
.PersistenceServiceException
- If any throwable was thrown during serialisation. Its cause is always set.
-
load
public static Object load(String encoded) throws NullPointerException, PersistenceServiceException
Loads a single object, which may form the root of an entire object graph, from XML content in the stringencoded
.Please note the following:
- This method will not tolerate any I/O or other deserialisation exceptions!
- Parameters:
encoded
- The XML string encoded representation of the root of an object graph - may not benull
.- Returns:
- The root of the loaded object graph - may be
null
. - Throws:
NullPointerException
- Ifencoded
isnull
.PersistenceServiceException
- If any throwable was thrown during serialisation. Its cause is always set.
-
-