docs: public final List<DataSlice> flatten(Object store) throws MessageEncodeFailedException {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "flatten");
  
      List<DataSlice> slices = null;                                              // d395685
  
      try {                                                                       // d395685
        /* The JMO does the real work */
        slices = jmo.flatten(store, getFlattenedClassName());     // SIB0112b.mfp.2
      }                                                                           // d395685
  
      // If the flatten fails, it may be an UnsupportedEncodingException which means
      // we have an underlying MQ message with an unsupported CCSID for the data.
      // If that is the case, the message may well be on the ExceptionDestination
      // already so we have to be able to flatten it.                                d395685
      catch (MessageEncodeFailedException e) {
        // Lower-levels have already FFDC'd everything that could possible be useful.
        // No FFDC code needed
  
        // Is the exception caused by an unsupported CCSID?
        Throwable e1 = e.getCause();
        while ((e1 != null) && !(e1 instanceof UnsupportedEncodingException)) {
          e1 = e1.getCause();
        }
        // If so, we therefore transcribe it to JMF and have another go.
        if (e1 != null) {
          try {
            JsMessageImpl tempMsg = (JsMessageImpl)this.transcribeToJmf();
            slices = tempMsg.jmo.flatten(store, getFlattenedClassName());
          }
          // If we can't transcribe there must be soemthing else wrong so give up
          catch (Exception newe) {
            // Lower-levels have already FFDC'd everything that could possible be useful.
            // No FFDC code needed
            if (newe instanceof MessageEncodeFailedException) {
              throw (MessageEncodeFailedException)newe;
            }
            else {
              throw new MessageEncodeFailedException(newe);
            }
          }
        }
  
        // If we got to the end of the exception chain without finding UnsupportedEncodingException
        // we must have a disaster, so we just throw the original exception on.
        else {
          throw e;
        }
      }
  
      /* Now we know the real size of the flattened message, store it           */
      int temp = 0;
      for (int i=0; i < slices.size(); i++) {
        temp = temp + slices.get(i).getLength();
      }
      // Setting approxLength isn't synchronized as a) it is atomic & b) the correctness isn't vital
      approxLength = temp;
  
      /* and return the result */
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "flatten");
      return slices;
    }