1

同事,我正在向NewOrderSingle服务器发送消息,服务器接收消息并发送响应(执行报告(35 = 8)):

public void sendOrderMessageToServer( ) throws ConfigError, InterruptedException {

         clientInitiator.start();


        SessionID sessionID = clientInitiator.getSessions().stream()
                .filter(id -> id.getBeginString().equals(BEGINSTRING_FIX44))
                .findFirst()
                .orElseThrow(RuntimeException::new);


        NewOrderSingle newOrderSingle = new NewOrderSingle();

        newOrderSingle.set(new ClOrdID(fixApiCommons.generateClOrdID(newOrderSingle)));
        newOrderSingle.set(new Side(Side.BUY));
        ......
        newOrderSingle.set(new OrdType(OrdType.MARKET));
        newOrderSingle.set(new TimeInForce(TimeInForce.FILL_OR_KILL));


        boolean send = clientQuickFixJTemplate.send(newOrderSingle, sessionID);


        log.info("Result: {}", send);

    }

此方法结果true在单元测试中,但我在日志中没有看到服务器的响应(执行报告(35 = 8))。

我有ApplicationListener课:

@Slf4j
@Component
public class ApplicationListener {


    @EventListener
    public void handleCreate(Create create) {
        log.info("onCreate: SessionId={}", create.getSessionId());
    }


    @EventListener
    public void handleLogon(Logon logon) {

        log.info("onLogon: SessionId={}", logon.getSessionId());
    }

    @EventListener
    public void handleLogout(Logout logout) {
        log.info("onLogout: SessionId={}", logout.getSessionId());
    }

    @EventListener
    public void handleToAdmin(ToAdmin toAdmin) {

        try {
            if (toAdmin.getMessage().getHeader().getString(35).equals("A")) {


                toAdmin.getMessage().setString(554, "*******");
                toAdmin.getMessage().setString(141, "Y");

            } 

        } catch (Exception e) {
            e.printStackTrace();
        }

       log.info("toAdmin: SessionId={}", toAdmin.getSessionId());

    }


    @EventListener
    public void handleFromAdmin(FromAdmin fromAdmin) {
        log.info("fromAdmin: Message={}, SessionId={}", fromAdmin.getMessage(), fromAdmin.getSessionId());
    }

    @EventListener
    public void handleToApp(ToApp toApp) {
        log.info("toApp: SessionId={}", toApp.getSessionId());
    }

    @EventListener
public void handleFromApp(FromApp fromApp) {
    log.info("fromApp: Message={}, SessionId={}", fromApp.getMessage(), fromApp.getSessionId());

    try {
                if (fromApp.getMessage().getHeader().getString(35).equals("8")) {
                log.info("It looks we handle ExecutionReport");
//programm doesn't come to this thread =(
            } else {
                log.info("It is not a ExecutionReport message");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

它在创建会话和登录时写入控制台、、、ToAdmin消息FromAdmin,但它无法处理消息响应。toAppfromAppNewOrderSingle

你能帮我如何处理执行报告(35 = 8)吗?

4

0 回答 0