docs: public JsMessage createInboundJsMessage(List<DataSlice> slices, Object conn) throws MessageDecodeFailedException {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(tc, "createInboundJsMessage", slices);
  
      CommsConnection commsConnection = null;
  
      //try to cast the connection object to a CommsConnection
      if(conn != null){
        if(conn instanceof CommsConnection){
          commsConnection = (CommsConnection) conn;
        }
        else{
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "Invalid comms connection");
          ClassCastException e = new ClassCastException();
          FFDCFilter.processException(e, "com.ibm.ws.sib.mfp.impl.JsMessageFactoryImpl.createInboundJsMessage", "254", this,
            new Object[] { MfpConstants.DM_SLICES, slices, conn });
          //FFDC but do not actually throw the exception as we might still be able to decode
          //without the CommsConnection
        }
      }
  
      // Trace the first slice or chunk just in case we get passed rubbish
      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
        if (slices.size() > 1) {
          SibTr.debug(tc, "Slice0: ", SibTr.formatSlice(slices.get(0)));
        }
        else {
          SibTr.debug(tc, "Start of only slice: ", SibTr.formatBytes(slices.get(0).getBytes(), slices.get(0).getOffset(), 256));
        }
      }
  
      //create a new jmo using the given data
      JsMsgObject jmo = new JsMsgObject(JsHdrAccess.schema,
                                        JsPayloadAccess.schema,
                                        slices,
                                        commsConnection);
  
      // Create a message of the appropriate specialisation
      JsMessage message = createSpecialisedMessage(jmo);
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(tc, "createInboundJsMessage", message);
      return message;
  
    }