code: @Override
      public <T extends Composite<S>> T copy() {
          try {
              String fullJSON = fullMapper.writeValueAsString(this);
              @SuppressWarnings("unchecked")
              T copy = (T) fullMapper.readValue(fullJSON, getClass());
              return copy;
          } catch (IOException e) {
              throw new RuntimeException("The attempted copy of an object failed.", e);
          }
      }
docs: This method should work for all objects. However, it is very inefficient and should only be
  used sparingly and for unit testing.
  
  @param <T> The concrete type of the smart object.
  @return An exact copy of the smart object.