1 package com.atlassian.vcache.marshallers;
2
3 import java.io.ObjectStreamClass;
4 import java.io.Serializable;
5 import javax.annotation.Nonnull;
6
7 import com.atlassian.annotations.PublicApi;
8 import com.atlassian.vcache.Marshaller;
9
10 /**
11 * Factory for {@link Marshaller} instances for common types.
12 *
13 * @since 1.0
14 */
15 @PublicApi
16 public class MarshallerFactory
17 {
18 /**
19 * Returns a {@link Marshaller} for {@link String} objects.
20 * @return a {@link Marshaller} for {@link String} objects.
21 */
22 @Nonnull
23 public static Marshaller<String> stringMarshaller()
24 {
25 return new StringMarshaller();
26 }
27
28 /**
29 * Returns a {@link Marshaller} for {@link Serializable} objects. When de-serializing, the default implementation of
30 * {@link java.io.ObjectInputStream#resolveClass(ObjectStreamClass)} is used to resolve {@link Class} objects.
31 *
32 * @param clazz the {@link Class} of the instances being marshalled
33 * @return a {@link Marshaller} for {@link Serializable} objects.
34 */
35 @Nonnull
36 public static <T extends Serializable> Marshaller<T> serializableMarshaller(Class<T> clazz)
37 {
38 return new JavaSerializationMarshaller<>(clazz);
39 }
40
41 /**
42 * Returns a {@link Marshaller} for {@link Serializable} objects. When de-serializing, the supplied
43 * {@link ClassLoader} is used to resolve {@link Class} objects.
44 *
45 * @param clazz the {@link Class} of the instances being marshalled
46 * @return a {@link Marshaller} for {@link Serializable} objects.
47 */
48 @Nonnull
49 public static <T extends Serializable> Marshaller<T> serializableMarshaller(Class<T> clazz, ClassLoader loader)
50 {
51 return new JavaSerializationMarshaller<>(clazz, loader);
52 }
53 }