@Test
  public void testSerializeCustom() {
    SFSSerializer sfsSerializer = new SFSSerializer();
    Entity entity = new Entity();
    Entity subEntity = new Entity();
    Entity subEntityCustom = new Entity();
    subEntity.setIntField(10);
    subEntityCustom.setIntField(99);
    entity.setWildcardList(Arrays.asList(subEntity));
    entity.setWildcardedListCustom(Arrays.asList(subEntityCustom));

    sfsSerializer.registerPostProcessor(
        new SerializePostProcessor() {
          @Override
          public <ST, DT extends TransportObject> void process(ST result, DT sourceObject) {
            if (sourceObject instanceof Entity)
              ((ISFSObject) result).putBool("postProcessed", true);
          }
        });
    sfsSerializer.registerPreProcessor(
        new SerializePreProcessor() {
          @Override
          public <DT> void process(DT sourceObject) {
            if (sourceObject instanceof Entity) ((Entity) sourceObject).setPreProcessed(true);
          }
        });

    ISFSObject sObj = sfsSerializer.serialize(entity);

    assertNotNull(sObj.getSFSArray("wildcardList"));
    assertTrue(sObj.getBool("postProcessed"));
    assertTrue(sObj.getBool("preProcessed"));
    Iterator<SFSDataWrapper> iterator = sObj.getSFSArray("wildcardList").iterator();
    assertEquals(
        subEntity.getIntField() * 2,
        ((SFSObject) iterator.next().getObject()).getInt("intField").intValue());

    Iterator<SFSDataWrapper> customIterator = sObj.getSFSArray("wildcardedListCustom").iterator();
    assertEquals(
        subEntityCustom.getIntField(),
        ((SFSObject) customIterator.next().getObject()).getInt("intField"));
  }