docs: private JMFNativePart initializePart(JMFSchema schema,
                                         short jmfVer,
                                         long encId,
                                         byte rawMessage[],
                                         int offset,
                                         int length,
                                         CommsConnection conn)
        throws MessageDecodeFailedException {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "initializePart", new Object[]
                                                                               {jmfVer
                                                                               ,debugId(encId)
                                                                               ,rawMessage
                                                                               ,offset
                                                                               ,length
                                                                               ,conn
                                                                               });
  
      JMFNativePart jmfPart = null;
  
      // Construct a JMF message part by decoding it from the buffers.
      try {
  
        //If no access schema was provided we use the encoding schema
        if (schema == null) {
          schema = JMFRegistry.instance.retrieve(encId);
        }
  
        //if a connection is available then we should check to make sure all schemas
        //are available now rather than wait until later
        if(conn != null){
  
          long[] unknownSchemata = JMFRegistry.instance.checkSchemata(jmfVer, rawMessage, offset);
          byte[] schemataRequest = null;
  
          //convert the schema ids to a byte[]
          int requestOffset = 0;
  
          //if we don't know the encoding schema then put that in the request also
          if(schema == null){
            schemataRequest = new byte[(unknownSchemata.length + 1)*8];
            ArrayUtil.writeLong(schemataRequest, requestOffset, encId);
            requestOffset += 8;
          }
          else if(unknownSchemata.length > 0){
            schemataRequest = new byte[(unknownSchemata.length)*8];
          }
          //add in all the unknown schemata
          for(int i=0; i<unknownSchemata.length; i++){
            ArrayUtil.writeLong(schemataRequest, requestOffset, unknownSchemata[i]);
            requestOffset += 8;
          }
          if(schemataRequest != null){
            //request the schemata via the connection
            byte[] newSchemata = null;
            try {
              newSchemata = conn.requestMFPSchemata(schemataRequest);
            }
            catch (SIConnectionDroppedException e) {
              FFDCFilter.processException(e, "com.ibm.ws.sib.mfp.impl.JsMsgObject.initializePart", "jmo400", this,
                new Object[] { MfpConstants.DM_BUFFER, rawMessage, Integer.valueOf(offset), Integer.valueOf(length) });
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "decode failed: " + e);
              throw new MessageDecodeFailedException(e);
            } catch (SIConnectionLostException e) {
              FFDCFilter.processException(e, "com.ibm.ws.sib.mfp.impl.JsMsgObject.initializePart", "jmo402", this,
                new Object[] { MfpConstants.DM_BUFFER, rawMessage, Integer.valueOf(offset), Integer.valueOf(length) });
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "decode failed: " + e);
              throw new MessageDecodeFailedException(e);
            } catch (SIConnectionUnavailableException e) {
              FFDCFilter.processException(e, "com.ibm.ws.sib.mfp.impl.JsMsgObject.initializePart", "jmo403", this,
                new Object[] { MfpConstants.DM_BUFFER, rawMessage, Integer.valueOf(offset), Integer.valueOf(length) });
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "decode failed: " + e);
              throw new MessageDecodeFailedException(e);
            } catch (SIErrorException e) {
              FFDCFilter.processException(e, "com.ibm.ws.sib.mfp.impl.JsMsgObject.initialize", "jmo404", this,
                new Object[] { MfpConstants.DM_BUFFER, rawMessage, Integer.valueOf(offset), Integer.valueOf(length) });
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "decode failed: " + e);
              throw new MessageDecodeFailedException(e);
            }
            if(newSchemata != null){
              //tell the SchemaManager about the new schemata
              SchemaManager.receiveSchemas(conn, newSchemata);
            }
  
            //make sure that we can get the encoding schema
            if(schema == null){
              schema = JMFRegistry.instance.retrieve(encId);
            }
          }
          if (schema == null) {
            if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Unable to retrieve message schema "+debugId(encId));
            MessageDecodeFailedException e = new MessageDecodeFailedException("No schema registered for schema id "+debugId(encId));
            FFDCFilter.processException(e, "com.ibm.ws.sib.mfp.impl.JsMsgObject.initializePart", "jmo425", this,
              new Object[] { MfpConstants.DM_BUFFER, rawMessage, Integer.valueOf(offset), Integer.valueOf(length) });
            throw e;
          }
        }
  
        //we should now have all the schemas we need (if the connection was available)
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Decoding: JMF version="+jmfVer+" encoding schema="+debugId(encId)+" access schema="+debugId(schema.getID()));
        jmfPart = JMFRegistry.instance.decode(schema, jmfVer, encId, rawMessage, offset, length);
  
      }
      catch (JMFException e) {
        FFDCFilter.processException(e, "com.ibm.ws.sib.mfp.impl.JsMsgObject.initializePart", "jmo450", this,
          new Object[] { MfpConstants.DM_BUFFER, rawMessage, Integer.valueOf(offset), Integer.valueOf(length) });
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "decode failed: " + e);
        throw new MessageDecodeFailedException(e);
      }
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "initializePart");
      return jmfPart;
    }