QuickFixJ错误:消息类

时间:2018-04-13 15:24:57

标签: quickfixj

我是FIX和QuickFixJ的新手。在我的应用程序上工作时,我得到了FIX拒绝" Tag不止一次出现:"我们收到的消息之一。为了调试错误,我创建了一个小型Java应用程序,它使用客户端提供的数据字典和导致问题的消息。以下是调试应用程序的代码(使用quickfix / J版本1.6.3):

    import quickfix.DataDictionary;
    import quickfix.Message;

    ...

    DataDictionary d = new DataDictionary("clientDictionary.xml");
    String m = "FIX message taken from the application log. It has 102 tags";

    Message message = new Message(m,d,true);

    System.out.println("Message as text:" + message.toString());
    System.out.println("Message as xml:" + message.toXML(d));

    try{
      d.validate(message);
    } catch(Exception e) {
      System.out.println("Validation Error:" + e.getMessage());
    }

...

运行应用程序时,第一个print(message.toString())返回一个只有13个标签的FIX消息(m中的初始消息有102个标签)。当以XML格式打印消息时(message.toXML(d)),我只得到13个标签。有趣的是" CheckSum"字段在消息对象中从102(以m给出)更改为010。最后,在验证消息(d.validate(message))时,它会抛出以下错误:"标记超出所需顺序,field = 1128"。这不是帮助我调试最初的问题,而是提出了几个问题:

  1. 为什么从输入FIX消息创建的对象只包含13个标签而不包含102?

  2. 为什么字典验证会抛出创建字典时未引发的错误(新消息(m,d,true) - true表示验证)?

  3. 不确定它是否有帮助,但这里是message.toXML(d)方法返回的字段(正文中只有1个字段):

    header
    field name="BeginString" tag="8"
    field name="BodyLength" tag="9"
    field name="MsgSeqNum" tag="34"
    field name="MsgType" tag="35"
    field name="SenderCompID" tag="49"
    field name="SendingTime" tag="52"
    field name="TargetCompID" tag="56"
    field name="OnBehalfOfCompID" tag="115"
    field name="DeliverToCompID" tag="128"
    field name="MessageEndcoding" tag="347"
    field name="ApplVerID" tag="1128"
    
    body
    field name="ApplExtID" tag="1156"
    
    trailer
    field name="CheckSum" tag="10"
    

    原始FIX消息中有许多字段缺少。例如字段名称="价格"标签=" 44&#34 ;.对我来说,似乎它使用的是不同的字典。我也尝试过像FIX50SP2.xml这样的其他标准词典,但结果完全一样。

    提前致谢,

0 个答案:

没有答案