QuickFIX/J Initiator — установка имени пользователя и пароля при входе в систему

Я работаю над разработкой решения для подключения к финансовому рынку с использованием протокола FIX с фреймворком quickfixj. В частности, я реализую инициатор, и мне нужно подключиться к акцептору, указав имя пользователя и пароль. Документация quickfixj не очень ясна в этом отношении о том, как передавать эти поля в сообщении о входе в систему на сервер.

Перебирая я обнаружил, что она заложена в функции toAdmin, я вставил в эту функцию следующий код:

@Override
public void toAdmin(Message message, SessionID sessionId) {

    Session.lookupSession(sessionId).setTargetDefaultApplicationVersionID(new ApplVerID("9"));

    final Message.Header header = message.getHeader();      

     try {
        if ( header.getField(new BooleanField(MsgType.FIELD)).equals(MsgType.LOGON) ) {                  
                message.setField(new StringField(Username.FIELD, "user")); 
                message.setField( new StringField(Password.FIELD, "pass"));
                System.out.println(">>> " + message.toRawString()); 
             }
    } catch (FieldNotFound e) {
        // TODO Auto-generated catch block

        e.printStackTrace();
    } 
}

Но я все еще не могу выполнить процесс входа в систему, и он показывает мне следующий журнал при попытке входа в систему.

<20190313-14:44:33, FIXT.1.1:aaa->bbb, outgoing> (8=FIXT.1.1 9=74 35=A 34=1 49=aaa 52=20190313-14:44:33.431 56=bbb 98=0 108=30 1137=9 10=131 )
<20190313-14:44:33, FIXT.1.1:aaa->bbb, event> (Initiated logon request)
<20190313-14:44:33, FIXT.1.1:aaa->bbb, event> (Disconnecting: Encountered END_OF_STREAM)
<20190313-14:44:37, FIXT.1.1:aaa->bbb, event> (MINA session created: local=/192.168.1.80:51372, class org.apache.mina.transport.socket.nio.NioSocketSession, remote=/3.3.3.3:443)
<20190313-14:44:38, FIXT.1.1:aaa->bbb, outgoing> (8=FIXT.1.1 9=74 35=A 34=2 49=aaa 52=20190313-14:44:38.420 56=bbb 98=0 108=30 1137=9 10=135 )
<20190313-14:44:38, FIXT.1.1:aaa->bbb, event> (Initiated logon request)
<20190313-14:44:38, FIXT.1.1:aaa->bbb, event> (Disconnecting: Encountered END_OF_STREAM)

На некоторых форумах упоминают, что это может происходить при неправильном вводе логина и пароля.

Вопросы:

  • Кто-то использовал quickfixj, передавая имя пользователя и пароль для аутентификации в акцепторе, который мог бы мне помочь.
  • Показанное сообщение об ошибке может иметь другую причину, о которой кто-то знает?

person Yoandy Pérez Villazón    schedule 13.03.2019    source источник
comment
Вы близки, но header.getField(new BooleanField(MsgType.FIELD)) ошибается. Вам не нужно логическое значение!   -  person Grant Birchmeier    schedule 13.03.2019


Ответы (2)


Это то, что вам нужно в вашем toAdmin():

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

Это находится в часто задаваемых вопросах пользователей.

person Grant Birchmeier    schedule 13.03.2019
comment
Он, @Grant, я воспользовался вашим предложением, спасибо, но проблема не устранена. По крайней мере решена проблема с логином и паролем. - person Yoandy Pérez Villazón; 13.03.2019
comment
Я ответил на вопрос, который вы задали. Это все, что я могу сделать. Задайте новый вопрос. - person Grant Birchmeier; 13.03.2019

Начиная с QuickFIX/J 2.2.0, вы можете передавать LogonTag настройки сеанса, чтобы установить эти теги в отправляемом сообщении о входе в систему.

Пример:

LogonTag=553=user
LogonTag1=554=password 
person Christoph John    schedule 18.06.2020
comment
Пожалуйста, не могли бы вы дать более подробную информацию? это не работает для меня - person user666; 10.06.2021
comment
Это определенно работает. Вы уверены, что используете QuickFIX/J (т. е. порт Java) по крайней мере версии 2.2.0? - person Christoph John; 10.06.2021
comment
я использую wso2, когда я пытаюсь обновить до 2.2.0, я получаю следующую ошибку: quickfix.ConfigError: FIX44.xml: свойство 'javax.xml.XMLConstas nts/property/accessExternalDTD» не распознан. и сообщение о входе в систему даже не отправляется, а в более старой версии имя пользователя не читается, но отправляется команда входа. - person user666; 10.06.2021
comment
Сообщение об ошибке является ошибкой версии 2.2.0. Попробуйте 2.3.0 - person Christoph John; 10.06.2021
comment
это сработало нормально, спасибо, я вижу имя пользователя и пароль в команде исправления. Однако я все еще получаю ответ о выходе из системы: Отсутствует обязательный тег, поле = 553 (в то время как 553 присутствует в сообщении), у вас есть идеи, почему? - person user666; 10.06.2021
comment
Нет. Но ваш контрагент должен быть в состоянии сообщить вам причину. - person Christoph John; 10.06.2021