View Javadoc

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  }