private synchronized void makeCompositeBuilder() throws InvalidObjectException {
    if (compositeBuilder != null) {
      return;
    }

    Class targetClass = (Class<?>) getTargetType();

    CompositeBuilder[][] builders = {{new CompositeBuilderViaFrom(targetClass, itemNames),},
        {new CompositeBuilderViaConstructor(targetClass, itemNames),},
        {new CompositeBuilderCheckGetters(targetClass, itemNames, getterConverters),
            new CompositeBuilderViaSetters(targetClass, itemNames),
            new CompositeBuilderViaProxy(targetClass, itemNames),},};
    CompositeBuilder foundBuilder = null;

    StringBuilder whyNots = new StringBuilder();
    Throwable possibleCause = null;
    find: for (CompositeBuilder[] relatedBuilders : builders) {
      for (int i = 0; i < relatedBuilders.length; i++) {
        CompositeBuilder builder = relatedBuilders[i];
        String whyNot = builder.applicable(getters);
        if (whyNot == null) {
          foundBuilder = builder;
          break find;
        }
        Throwable cause = builder.possibleCause();
        if (cause != null) {
          possibleCause = cause;
        }
        if (whyNot.length() > 0) {
          if (whyNots.length() > 0) {
            whyNots.append("; ");
          }
          whyNots.append(whyNot);
          if (i == 0) {
            break;
          }
        }
      }
    }
    if (foundBuilder == null) {
      String msg = "Do not know how to make a " + targetClass.getName() + " from a CompositeData: "
          + whyNots;
      if (possibleCause != null) {
        msg += ". Remaining exceptions show a POSSIBLE cause.";
      }
      throw invalidObjectException(msg, possibleCause);
    }
    compositeBuilder = foundBuilder;
  }
Determine how to convert back from the CompositeData into the original Java type. For a type
that is not reconstructible, this method will fail every time, and will throw the right
exception.
geode-core/src/main/java/org/apache/geode/management/internal/CompositeConverter.java