public static JBossMessage createMessage(
      final ClientMessage message, final ClientSession session) {
    int type = message.getType();

    JBossMessage msg;

    switch (type) {
      case JBossMessage.TYPE:
        {
          msg = new JBossMessage(message, session);
          break;
        }
      case JBossBytesMessage.TYPE:
        {
          msg = new JBossBytesMessage(message, session);
          break;
        }
      case JBossMapMessage.TYPE:
        {
          msg = new JBossMapMessage(message, session);
          break;
        }
      case JBossObjectMessage.TYPE:
        {
          msg = new JBossObjectMessage(message, session);
          break;
        }
      case JBossStreamMessage.TYPE:
        {
          msg = new JBossStreamMessage(message, session);
          break;
        }
      case JBossTextMessage.TYPE:
        {
          msg = new JBossTextMessage(message, session);
          break;
        }
      default:
        {
          throw new IllegalArgumentException("Invalid message type " + type);
        }
    }

    return msg;
  }