1 package com.atlassian.vcache.marshallers;
2
3 import com.atlassian.annotations.PublicApi;
4 import com.atlassian.vcache.Marshaller;
5
6 import java.io.ObjectStreamClass;
7 import java.io.Serializable;
8 import java.util.Optional;
9
10 /**
11 * Factory for {@link Marshaller} instances for common types.
12 *
13 * @since 1.0
14 * @deprecated since 1.5.0. Use the Atlassian Marshalling API and implementations instead.
15 */
16 @PublicApi
17 @Deprecated
18 public class MarshallerFactory {
19 /**
20 * Returns a {@link Marshaller} for {@link Optional} objects.
21 *
22 * @param valueMarshaller used to marshall values held by {@link Optional} instances.
23 * @param <T> the value type
24 * @return a {@link Marshaller} for {@link Optional} objects.
25 */
26 public static <T> Marshaller<Optional<T>> optionalMarshaller(Marshaller<T> valueMarshaller) {
27 return new OptionalMarshaller<>(valueMarshaller);
28 }
29
30 /**
31 * Returns a {@link Marshaller} for {@link String} objects.
32 *
33 * @return a {@link Marshaller} for {@link String} objects.
34 */
35 public static Marshaller<String> stringMarshaller() {
36 return new StringMarshaller();
37 }
38
39 /**
40 * Returns a {@link Marshaller} for {@link Serializable} objects. When de-serializing, the default implementation of
41 * {@link java.io.ObjectInputStream#resolveClass(ObjectStreamClass)} is used to resolve {@link Class} objects.
42 *
43 * @param clazz the {@link Class} of the instances being marshalled
44 * @param <T> the value type
45 * @return a {@link Marshaller} for {@link Serializable} objects.
46 */
47 public static <T extends Serializable> Marshaller<T> serializableMarshaller(Class<T> clazz) {
48 return new JavaSerializationMarshaller<>(clazz);
49 }
50
51 /**
52 * Returns a {@link Marshaller} for {@link Serializable} objects. When de-serializing, the supplied
53 * {@link ClassLoader} is used to resolve {@link Class} objects.
54 *
55 * @param clazz the {@link Class} of the instances being marshalled
56 * @param loader the {@link ClassLoader} is used to resolve {@link Class} objects
57 * @param <T> the value type
58 * @return a {@link Marshaller} for {@link Serializable} objects.
59 */
60 public static <T extends Serializable> Marshaller<T> serializableMarshaller(Class<T> clazz, ClassLoader loader) {
61 return new JavaSerializationMarshaller<>(clazz, loader);
62 }
63 }