0

我想通过添加当前会话设置中的用户名和密码值来自定义在 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 中是可能的。

4

3 回答 3

4

我假设您的意思是要在配置文件中定义自定义用户名/密码设置。(QF 没有这些内置功能。)

此链接将向您展示如何使用自定义设置。 http://www.quickfixj.org/confluence/display/qfj/Using+Custom+Settings
(忽略散文中关于getSessionSettings(); 这种方法在当前版本中似乎并不实际存在。)

如果该页面出现故障,简而言之,该过程是这样的:

以某种方式为您的 MessageCracker 应用程序提供对您的SessionSettings对象的引用(无论是通过构造函数还是 get/set 或然而)。

在你的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");
}

(我还没有编译这段代码;如果我有语法错误,请告诉我,我会修复它。)

我昨天刚刚添加了相当于QF/n 用户常见问题解答的 C#。您必须在 QF/n 邮件列表中,否则您的时机非常好。

(我可能也应该将此添加到QF/j 用户常见问题解答中。)

于 2013-12-06T15:04:05.180 回答
1

你确定你在寻找正确的方向。我刚刚检查了QuickfixJ 文档中的Session类。它没有任何数据成员用户名密码。所以你不能提取它不包含的任何值。

或者你正在使用你的特殊版本的 Session 类?我也不认为 Session 应该持有任何这些数据,它是不必要的并且可以被恶意使用。我不确定同一侧如何有多个用户 ID 和密码来连接到另一侧(相同的,我假设是这样,因为您尝试使用相同的会话 ID 来获取用户 ID 和密码),打开所有问题再次。

因此,如果您只有一个用户 ID/密码,最好从您的数据库或您可能正在使用的其他来源中获取它,而不是尝试从会话中获取它。

于 2013-12-06T12:52:33.660 回答
1

您可以在 QuickFIX/J 中执行类似的操作。以 QFJ wiki为例Session您可以为您的实现提供一个SessionSettings实例Application,然后使用该对象来获取您的自定义设置,而不是通过 访问会话设置。

于 2013-12-06T14:57:51.227 回答