Java 从marketdataincremental刷新获取值时出错

Java 从marketdataincremental刷新获取值时出错,java,fix-protocol,quickfixj,Java,Fix Protocol,Quickfixj,我的quickfixj应用程序出错。首先,我得到了这样一个错误: Out of order repeating group members Out of order repeating group members 之后,我将以下文本添加到initiator.config中: ValidateUserDefinedFields=N ValidateIncomingMessage=N ValidateUserDefinedFields=N ValidateIncomingMessage=N

我的quickfixj应用程序出错。首先,我得到了这样一个错误:

Out of order repeating group members
Out of order repeating group members
之后,我将以下文本添加到initiator.config中:

ValidateUserDefinedFields=N
ValidateIncomingMessage=N
ValidateUserDefinedFields=N
ValidateIncomingMessage=N
但现在我的应用程序中出现了另一个错误:

quickfix.FieldNotFound: Field was not found in message, field=55
        at quickfix.FieldMap.getField(FieldMap.java:223)
        at quickfix.FieldMap.getString(FieldMap.java:237)
        at com.dxtr.fastmatch.marketdatarequestapps.TestMarketdataRequest.fromApp(TestMarketdataRequest.java:38)
        at quickfix.Session.fromCallback(Session.java:1847)
        at quickfix.Session.verify(Session.java:1791)
        at quickfix.Session.verify(Session.java:1862)
        at quickfix.Session.next(Session.java:1047)
        at quickfix.Session.next(Session.java:1204)
        at quickfix.mina.SingleThreadedEventHandlingStrategy$SessionMessageEvent.processMessage(SingleThreadedEventHandlingStrategy.java:163)
        at quickfix.mina.SingleThreadedEventHandlingStrategy.block(SingleThreadedEventHandlingStrategy.java:113)
        at quickfix.mina.SingleThreadedEventHandlingStrategy.lambda$blockInThread$1(SingleThreadedEventHandlingStrategy.java:145)
        at quickfix.mina.SingleThreadedEventHandlingStrategy$ThreadAdapter$RunnableWrapper.run(SingleThreadedEventHandlingStrategy.java:267)
        at java.lang.Thread.run(Thread.java:748)
我获取符号值的代码是:

public void fromApp(quickfix.Message message, SessionID sessionID)
            throws FieldNotFound, IncorrectDataFormat, IncorrectTagValue, UnsupportedMessageType {
         try {
                String symbol = message.getString(Symbol.FIELD);
                    System.out.println(" FromApp " + message);
                    message.getString(TransactTime.FIELD);
//                  String seqNo = message.getString(MsgSeqNum.FIELD);
                    double bid = message.getDouble(MDEntryPx.FIELD);
                    double ask = message.getDouble(MDEntryPx.FIELD);


//                  System.out.println(seqNo + " " + message);


            } catch (FieldNotFound fieldNotFound) {
                fieldNotFound.printStackTrace();
            }
        }
我还使用了这个代码

    public void onMessage (MarketDataIncrementalRefresh message, SessionID sessionID) throws FieldNotFound{
     try
       {
           MDReqID mdreqid = new MDReqID();
           SendingTime sendingtime = new SendingTime();
           NoMDEntries nomdentries = new NoMDEntries();
           quickfix.fix42.MarketDataIncrementalRefresh.NoMDEntries group
               = new quickfix.fix42.MarketDataIncrementalRefresh.NoMDEntries();
           MDUpdateAction mdupdateaction = new MDUpdateAction();
           DeleteReason deletereason = new DeleteReason();
           MDEntryType mdentrytype = new MDEntryType();
           MDEntryID mdentryid = new MDEntryID();
           Symbol symbol = new Symbol();
           MDEntryOriginator mdentryoriginator = new MDEntryOriginator();
           MDEntryPx mdentrypx = new MDEntryPx();
           Currency currency = new Currency();
           MDEntrySize mdentrysize = new MDEntrySize();
           ExpireDate expiredate = new ExpireDate();
           ExpireTime expiretime = new ExpireTime();
           NumberOfOrders numberoforders = new NumberOfOrders();
           MDEntryPositionNo mdentrypositionno = new MDEntryPositionNo();

           message.getField(nomdentries);
           message.getField(sendingtime);

           message.getGroup(1, group);

           int list = nomdentries.getValue();
           for (int i = 0; i < list; i++)
           {
               message.getGroup(i + 1, group);
               group.get(mdupdateaction);
               if (mdupdateaction.getValue() == '2')
                System.out.println("Enter");
               group.get(deletereason);
               group.get(mdentrytype);
               group.get(mdentryid);
               group.get(symbol);
               group.get(mdentryoriginator);
               if (mdupdateaction.getValue() == '0')
                   group.get(mdentrypx);
               group.get(currency);
               if (mdupdateaction.getValue() == '0')
                   group.get(mdentrysize);
           }

           System.out.printf("Got Symbol {0} Price {1}", 
       symbol.getValue(), mdentrypx.getValue());

}catch (Exception ex)
       {
    System.out.println("error" + ex);
这里是我在message.log中检查的值 8=FIX.4.2^A9=0217^A35=X^A34=7291^A49=Fastmatch1^A52=20200401-10:47:59.833^A56=MDValueTrade2UAT1^A262=VT^A268=02^A279=2^A55=GBP/CHF^A269=0^A278=1140851192^A270=1.19503^A271=02000000^A279=0^A55=GBP/CHF^A269=0^A278=1140851194=1950671^A101 我的经纪人已将价格等寄给我 我的问题是:如何从这段代码修复我的问题

首先,我得到了这样一个错误:

Out of order repeating group members
Out of order repeating group members
您的数据字典与您的交易对手的不匹配。修好它,这个就会消失

之后,我将以下文本添加到initiator.config中:

ValidateUserDefinedFields=N
ValidateIncomingMessage=N
ValidateUserDefinedFields=N
ValidateIncomingMessage=N
这并没有解决任何问题——它隐藏了您的实际问题,让您看到了一个新的假问题

您需要做的是: 你的配置有这个,对吗

UseDataDictionary=Y
DataDictionary=path/to/FIXnn.xml
# or if FIX5:
AppDataDictionary=path/to/FIX5n.xml
TransportDataDictionary=path/to/FIXT.xml
查找您的交易对手的文档,并确保您的xml文件的消息和字段与他们所说的要发送给您的内容相匹配。确保所有重复组具有相同顺序的相同字段


下面介绍数据字典xml文件的结构。这很简单。

您在哪里调用此方法?sendMarketDatarequest?我使用fromAppquickfix获取数据。消息消息消息,SessionID SessionID抛出FieldNotFound,不正确的数据格式,不正确的TagValue,不支持的消息类型{try{String symbol=message.getStringSymbol.FIELD;System.out.println FromApp+message;message.getStringTransactionTime.FIELD;//String seqNo=message.getStringMsgSeqNum.FIELD;double bid=message.getDoubleMDEntryPx.FIELD;double ask=message.getDoubleMDEntryPx.FIELD;@UmaisGillani我已经用代码更新了我的问题。我不知道我的代码哪里出了问题。在我检查了我的代理文档后,他们使用了268个nomdentry Y、279个MDUpdateAction Y、55个符号Y、269个MDEntryType Y、278个MDEntryID Y、270个MDEntryPX N我的重复组有问题吗?嗨@Grant Birchmeier你的解决方案现在也可以了谢谢broGreat,很高兴听到这个消息。