View Javadoc

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  }