code: public static <T> TypeSerializer<T> tryReadSerializer(
  			DataInputView in,
  			ClassLoader userCodeClassLoader,
  			boolean useDummyPlaceholder) throws IOException {
  
  		final TypeSerializerSerializationUtil.TypeSerializerSerializationProxy<T> proxy =
  			new TypeSerializerSerializationUtil.TypeSerializerSerializationProxy<>(userCodeClassLoader);
  
  		try {
  			proxy.read(in);
  			return proxy.getTypeSerializer();
  		} catch (UnloadableTypeSerializerException e) {
  			if (useDummyPlaceholder) {
  				LOG.warn("Could not read a requested serializer. Replaced with a UnloadableDummyTypeSerializer.", e.getCause());
  				return new UnloadableDummyTypeSerializer<>(e.getSerializerBytes(), e.getCause());
  			} else {
  				throw e;
  			}
  		}
  	}
docs: Reads from a data input view a {@link TypeSerializer} that was previously
  written using {@link #writeSerializer(DataOutputView, TypeSerializer)}.
  
  <p>If deserialization fails due to any exception, users can opt to use a dummy
  {@link UnloadableDummyTypeSerializer} to hold the serializer bytes, otherwise an {@link IOException} is thrown.
  
  @param in the data input view.
  @param userCodeClassLoader the user code class loader to use.
  @param useDummyPlaceholder whether or not to use a dummy {@link UnloadableDummyTypeSerializer} to hold the
  serializer bytes in the case of a {@link ClassNotFoundException} or
  {@link InvalidClassException}.
  
  @param <T> Data type of the serializer.
  
  @return the deserialized serializer.