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
реализации, а затем использовать этот объект для получения пользовательских настроек.