docs: static Message inboundJmsInstance(JsJmsMessage newMsg, JmsSessionImpl newSess, Map passThruProps) {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(tc, "inboundJmsInstance", new Object[] { newMsg, newSess, passThruProps });
  
          // This is where the mapping of MFP components to JMS components takes
          // place. The list of mappings should increase as we support more method
          // types.
  
          JmsMessageImpl jmsMsg = null;
  
          JmsBodyType bt = newMsg.getBodyType();
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
              SibTr.debug(tc, "body type: " + bt);
  
          int bodyTypeInt = -2; // This is not one of the JmsBodyType constants.
          if (bt != null) {
              bodyTypeInt = bt.toInt();
          }
  
          switch (bodyTypeInt) {
  
              case JmsBodyType.NULL_INT:
                  jmsMsg = new JmsMessageImpl(newMsg, newSess);
                  break;
  
              case JmsBodyType.TEXT_INT:
                  jmsMsg = new JmsTextMessageImpl((JsJmsTextMessage) newMsg, newSess);
                  break;
  
              case JmsBodyType.MAP_INT:
                  jmsMsg = new JmsMapMessageImpl((JsJmsMapMessage) newMsg, newSess);
                  break;
  
              case JmsBodyType.OBJECT_INT:
                  jmsMsg = new JmsObjectMessageImpl((JsJmsObjectMessage) newMsg, newSess);
                  break;
  
              case JmsBodyType.BYTES_INT:
                  jmsMsg = new JmsBytesMessageImpl((JsJmsBytesMessage) newMsg, newSess);
                  break;
  
              case JmsBodyType.STREAM_INT:
                  jmsMsg = new JmsStreamMessageImpl((JsJmsStreamMessage) newMsg, newSess);
                  break;
  
              default:
                  // Catch-all situation to translate to a JMS Message instance - we won't be
                  // able to get to any of the body data, but the header fields would be visible.
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(tc, "UNKNOWN MESSAGE TYPE FOUND: " + bt);
                  jmsMsg = new JmsMessageImpl(newMsg, newSess);
                  break;
  
          }
  
          // Need to transfer certain performance related properties from the pass through properties
          // to the new message here. Only attempt this if pass thru props have been provided
          if (passThruProps != null) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(tc, "Pass through properties provided - attempting to assign to new message");
  
              // Discover the properties from the pass thru props
              String producerProp = (String) passThruProps.get(JmsraConstants.PRODUCER_DOES_NOT_MODIFY_PAYLOAD_AFTER_SET);
              String consumerProp = (String) passThruProps.get(JmsraConstants.CONSUMER_DOES_NOT_MODIFY_PAYLOAD_AFTER_GET);
  
              // Assign attributes to the message according to value of properties
              if (producerProp != null) {
                  jmsMsg.producerWontModifyPayloadAfterSet = producerProp.equalsIgnoreCase(ApiJmsConstants.WILL_NOT_MODIFY_PAYLOAD);
              }
              if (consumerProp != null) {
                  jmsMsg.consumerWontModifyPayloadAfterGet = consumerProp.equalsIgnoreCase(ApiJmsConstants.WILL_NOT_MODIFY_PAYLOAD);
              }
          }
  
          // When a JMS Message has been received, it's body and properties are read-only
          // until clearBody() or clearProperties() are called.
          jmsMsg.bodyReadOnly = true;
          jmsMsg.propertiesReadOnly = true;
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "inboundJmsInstance");
          return jmsMsg;
      }