docs: @Override
      public <T> T receiveBody(Class<T> paramClass, long timeout) throws MessageFormatRuntimeException, JMSRuntimeException {
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "receiveBody", new Object[] { paramClass, timeout });
  
          T returnValue = null;
  
          try {
  
              Message msg = null;
  
              // check if the paramClass is valid
              if (!(String.class.isAssignableFrom(paramClass) || Serializable.class.isAssignableFrom(paramClass) || Map.class.isAssignableFrom(paramClass)
              || byte[].class.isAssignableFrom(paramClass))) {
                  // invalid paramClass, which is not compatible with any message body type
                  throw (javax.jms.MessageFormatException) JmsErrorUtils.newThrowable(javax.jms.MessageFormatException.class,
                                                                                      "INVALID_CLASS_TYPE_CWSIA0118",
                                                                                      new Object[] { paramClass },
                                                                                      tc
                                  );
              }
  
              // receive the message
              msg = receive(timeout);
  
              // get the message body
              if (msg != null) {
                  returnValue = msg.getBody(paramClass);
                  if (returnValue == null) { // has no body, hence throw MessageFormatRuntimeException as per JMS 2.0 spec
                      throw (javax.jms.MessageFormatException) JmsErrorUtils.newThrowable(javax.jms.MessageFormatException.class,
                                                                                          "NO_MSG_BODY_CWSIA0119",
                                                                                          null,
                                                                                          tc
                                      );
                  }
                  else
                  {
                      if (!paramClass.isAssignableFrom(returnValue.getClass()))
                      {
                          // invalid paramClass, which is not compatible with message body type
                          throw (javax.jms.MessageFormatException) JmsErrorUtils.newThrowable(javax.jms.MessageFormatException.class,
                                                                                              "INVALID_CLASS_TYPE_CWSIA0118",
                                                                                              new Object[] { paramClass },
                                                                                              tc
                                          );
                      }
  
                  }
              }
          } catch (MessageFormatException mfe) {
              throw (MessageFormatRuntimeException) JmsErrorUtils.getJMS2Exception(mfe, MessageFormatRuntimeException.class);
          } catch (JMSException jmse) {
              throw (JMSRuntimeException) JmsErrorUtils.getJMS2Exception(jmse, JMSRuntimeException.class);
          } finally {
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  SibTr.exit(this, tc, "receiveBody", new Object[] { returnValue });
          }
          return returnValue;
  
      }