quickfixJ Получение настроек сеанса из объекта сеанса

Я хотел бы настроить отправленное сообщение для входа в метод toAdmin, добавив значения имени пользователя и пароля из текущих настроек сеанса. Что-то вроде того:

@Override
public void toAdmin(Message message, SessionID sessionId) {
    Header header = message.getHeader();
    if (!header.isSetField(MsgType.FIELD) || !header.getString(MsgType.FIELD).equals(MsgType.LOGON))
    {
        // not a logon message: do not modify it
        return;
    }

    Session session = Session.lookupSession(sessionId);           

    message.setField(new Username(seesion.getSettingValue("Username")));
    message.setField(new Password(seesion.getSettingValue("Password")));
}

getSettingValue Метод не существует. Есть ли способ сделать это в quickfixJ? Кстати, это возможно в quickfixn.

3 ответа

Решение

Я предполагаю, что вы имеете в виду, что вы хотите определить пользовательские настройки имени пользователя / пароля в вашем конфигурационном файле. (QF не имеет этих встроенных.)

Эта ссылка покажет вам, как использовать пользовательские настройки. http://www.quickfixj.org/confluence/display/qfj/Using+Custom+Settings
(Игнорировать немного в прозе о getSessionSettings(); этот метод фактически не существует в текущей сборке.)

В случае, если эта страница закрывается, в двух словах процесс выглядит так:

Каким-то образом дать вашему приложению MessageCracker ссылку на ваш SessionSettings объект (будь то конструктор или получить / установить или однако).

В вашем toAdmin(), сделайте что-то вроде этого:

final String msgType = msg.getHeader().getString(MsgType.FIELD);
if(MsgType.LOGON.compareTo(msgType) == 0)
{
    msg.setString(quickfix.fields.Username.FIELD,
      mySettings.getString(sessionID, "Username");
    msg.setString(quickfix.fields.Password.FIELD,
      mySettings.getString(sessionID, "Password");
}

(Я не скомпилировал этот код; пожалуйста, дайте мне знать, если у меня есть синтаксическая ошибка, и я исправлю ее.)

Я буквально вчера добавил эквивалент C# в FAQ пользователя QF/n. Вы должны быть в списке рассылки QF/n, иначе у вас будет отличное время.

(Вероятно, мне следует добавить это в FAQ пользователя QF / j.)

Вы уверены, что смотрите в правильном направлении. Я только что проверил класс Session в документации по QuickfixJ. Он не имеет данных членов имя пользователя или пароль. Таким образом, вы не можете извлечь какие-либо значения, которых он не содержит.

Или вы используете свою специальную версию класса Session? Я не верю, что Session также должен содержать какие-либо из этих данных, они не нужны и открыты для злонамеренного использования. Я не уверен, как одна и та же сторона может иметь несколько идентификаторов пользователей и паролей для подключения к другой стороне (ту же самую, и я так полагаю, потому что вы пытаетесь использовать один и тот же идентификатор сеанса для получения идентификатора пользователя и пароля), открывает все проблемы снова.

Поэтому, если у вас есть один идентификатор пользователя / пароль, лучше взять его из своей БД или из другого источника, который вы могли бы использовать, а не пытаться получить его из сеанса.

Вы можете сделать что-то подобное в QuickFIX/J. Взгляните на вики QFJ для примера. Вместо доступа к настройкам сеанса через Session Вы можете предоставить SessionSettings экземпляр вашего Application реализации, а затем использовать этот объект для получения пользовательских настроек.

Другие вопросы по тегам