/**
   * @param cctx Cache context.
   * @param ldr Class loader.
   * @throws IgniteCheckedException In case of error.
   */
  void unmarshal(GridCacheContext cctx, @Nullable ClassLoader ldr) throws IgniteCheckedException {
    if (!isFiltered()) {
      key.finishUnmarshal(cctx.cacheObjectContext(), ldr);

      if (newVal != null) newVal.finishUnmarshal(cctx.cacheObjectContext(), ldr);

      if (oldVal != null) oldVal.finishUnmarshal(cctx.cacheObjectContext(), ldr);
    }
  }
  /**
   * @param cctx Cache context.
   * @throws IgniteCheckedException In case of error.
   */
  void prepareMarshal(GridCacheContext cctx) throws IgniteCheckedException {
    assert key != null;

    key.prepareMarshal(cctx.cacheObjectContext());

    if (newVal != null) newVal.prepareMarshal(cctx.cacheObjectContext());

    if (oldVal != null) oldVal.prepareMarshal(cctx.cacheObjectContext());
  }
 /**
  * This method is called after the whole message is received and is responsible for unmarshalling
  * state.
  *
  * @param ctx Context.
  * @param ldr Class loader.
  * @throws IgniteCheckedException If failed.
  */
 public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws IgniteCheckedException {
   if (val != null) val.finishUnmarshal(ctx.cacheObjectContext(), ldr);
 }
 /**
  * This method is called before the whole message is sent and is responsible for pre-marshalling
  * state.
  *
  * @param ctx Cache object context.
  * @throws IgniteCheckedException If failed.
  */
 public void prepareMarshal(CacheObjectContext ctx) throws IgniteCheckedException {
   if (val != null) val.prepareMarshal(ctx);
 }