Взломать реализацию для пользовательского объекта в quickFixj - PullRequest
0 голосов
/ 13 марта 2019

Я создал пользовательский объект в FIX44.xml. Я хочу вызвать обработчик onMessage в приемнике для того же пользовательского объекта, используя реализацию взлома, но добавление крэка в fromApp приемника не вызывает onMessage. Вот код

@Override
    public void fromApp(Message arg0, SessionID arg1) throws FieldNotFound, IncorrectDataFormat, 
    IncorrectTagValue, UnsupportedMessageType {
     crack(arg0, arg1); // should calls onMessage(..,..) of custom object
    }


 public void onMessage(MyCustomObject message, SessionID sessionID)
            throws FieldNotFound, UnsupportedMessageType, IncorrectTagValue {
        //do something
    }

1 Ответ

0 голосов
/ 23 апреля 2019

Привет Иша и добро пожаловать в переполнение стека! Я подозреваю, что ваш класс не реализует интерфейс MessageCracker (вы не включили полное определение класса).

Правильное использование этого интерфейса и определение методов взлома ваших сообщений описано в документации QuickFIX / J Receiving Message .

Цитировать соответствующие части, которые включают в себя пример:

Определите ваше приложение так:

import quickfix.Application;
import quickfix.MessageCracker;

public class MyApplication
  extends MessageCracker implements quickfix.Application

QuickFIX / J версии 1.16 или новее поддерживает новую версию MessageCracker, который динамически обнаруживает метод обработки сообщений используя соглашение об именовании методов (аналогично более ранним версиям) QuickFIX / J) или помечая методы обработчиков с помощью @Handler аннотаций.

Примеры ...

import quickfix.Application;
import quickfix.MessageCracker;

public class MyApplication extends MessageCracker implements quickfix.Application
{
    public void fromApp(Message message, SessionID sessionID)
            throws FieldNotFound, UnsupportedMessageType, IncorrectTagValue {
        crack(message, sessionID);
    }

    // Using annotation
    @Handler
    public void myEmailHandler(quickfix.fix50.Email email, SessionID sessionID) {
        // handler implementation
    }

    // By convention (notice different version of FIX. It's an error to have two handlers for the same message)
    // Convention is "onMessage" method with message object as first argument and SessionID as second argument
    public void onMessage(quickfix.fix44.Email email, SessionID sessionID) {
        // handler implementation
    }
}
...