private Class<?> generateSerializableImplWithValue() throws ClassNotFoundException {
      ClassGen cg = new ClassGen(CLASS_NAME_SERIALIZABLE_IMPL_WITH_VALUE,
          CLASS_NAME_SERIALIZABLE_IMPL, GENERATED, Constants.ACC_PUBLIC | Constants.ACC_SUPER,
          new String[] {Valuable.class.getName()});
      ConstantPoolGen cp = cg.getConstantPool();
      InstructionFactory fac = new InstructionFactory(cg, cp);

      // field
      FieldGen fg = new FieldGen(Constants.ACC_PRIVATE, Type.OBJECT, VALUE, cp);
      Field field = fg.getField();
      cg.addField(field);

      // empty constructor
      cg.addEmptyConstructor(Constants.ACC_PUBLIC);

      // constructor with arg
      InstructionList ctor = new InstructionList();
      MethodGen ctorMethod = new MethodGen(Constants.ACC_PUBLIC, Type.VOID,
          new Type[] {Type.OBJECT}, new String[] {"arg0"}, "<init>",
          "org.apache.geode.internal.util.bcel.SerializableImplWithValue", ctor, cp);
      ctorMethod.setMaxStack(2);

      InstructionHandle ctor_ih_0 = ctor.append(InstructionFactory.createLoad(Type.OBJECT, 0));
      ctor.append(fac.createInvoke(CLASS_NAME_SERIALIZABLE_IMPL, "<init>", Type.VOID, Type.NO_ARGS,
          Constants.INVOKESPECIAL));
      InstructionHandle ctor_ih_4 = ctor.append(InstructionFactory.createLoad(Type.OBJECT, 0));
      ctor.append(InstructionFactory.createLoad(Type.OBJECT, 1));
      ctor.append(fac.createFieldAccess(CLASS_NAME_SERIALIZABLE_IMPL_WITH_VALUE, "value",
          Type.OBJECT, Constants.PUTFIELD));
      InstructionHandle ctor_ih_9 = ctor.append(InstructionFactory.createReturn(Type.VOID));

      cg.addMethod(ctorMethod.getMethod());
      ctor.dispose();

      // getter
      InstructionList getter = new InstructionList();
      MethodGen getterMethod = new MethodGen(Constants.ACC_PUBLIC, Type.OBJECT, null, null,
          GET_VALUE, CLASS_NAME_SERIALIZABLE_IMPL_WITH_VALUE, getter, cp);
      getterMethod.setMaxStack(1);

      InstructionHandle getter_ih_0 = getter.append(InstructionFactory.createLoad(Type.OBJECT, 0));
      InstructionHandle getter_ih_1 = getter.append(fac.createGetField(cg.getClassName(),
          field.getName(), Type.getType(field.getSignature())));
      InstructionHandle getter_ih_4 = getter.append(InstructionFactory.createReturn(Type.OBJECT));

      cg.addMethod(getterMethod.getMethod());
      getter.dispose();

      // setter
      InstructionList setter = new InstructionList();
      MethodGen setterMethod = new MethodGen(Constants.ACC_PUBLIC, Type.VOID,
          new Type[] {Type.OBJECT}, new String[] {field.getName()}, SET_VALUE,
          CLASS_NAME_SERIALIZABLE_IMPL_WITH_VALUE, setter, cp);
      setterMethod.setMaxStack(2);

      InstructionHandle setter_ih_0 = setter.append(InstructionFactory.createLoad(Type.OBJECT, 0));
      InstructionHandle setter_ih_1 = setter.append(InstructionFactory.createLoad(Type.OBJECT, 1));
      InstructionHandle setter_ih_2 = setter.append(fac.createPutField(cg.getClassName(),
          field.getName(), Type.getType(field.getSignature())));
      InstructionHandle setter_ih_0_ih_5 =
          setter.append(InstructionFactory.createReturn(Type.VOID));

      cg.addMethod(setterMethod.getMethod());
      setter.dispose();

      JavaClass jClazz = cg.getJavaClass();
      byte[] bytes = jClazz.getBytes();
      return defineClass(jClazz.getClassName(), bytes, 0, bytes.length);
    }
<pre>
public class SerializableImplWithValue extends SerializableImpl implements Valuable {

  private Object value;

  public SerializableImplWithValue() {}

  public SerializableImplWithValue(Object value) {
    this.value = value;
  }

  public Object getValue() {
    return this.value;
  }

  public void setValue(Object value) {
    this.value = value;
  }
}
</pre>

@see Valuable
geode-core/src/test/java/org/apache/geode/internal/util/BlobHelperWithThreadContextClassLoaderTest.java