Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 序列化和反序列化后,Quickfix消息不同_Java_Quickfixj - Fatal编程技术网

Java 序列化和反序列化后,Quickfix消息不同

Java 序列化和反序列化后,Quickfix消息不同,java,quickfixj,Java,Quickfixj,我正在尝试实现创建修复消息以手动创建MarketDataIncrementalRefresh。当我将创建的消息转换为String时,然后将其从该字符串转换为MarketDataIncrementalRefresh——我将获得另一个MarketDataIncrementalRefresh 我不明白我的代码出了什么问题 import static org.testng.Assert.assertEquals; import org.testng.annotations.Test; import

我正在尝试实现创建修复消息以手动创建
MarketDataIncrementalRefresh
。当我将创建的消息转换为
String
时,然后将其从该
字符串转换为
MarketDataIncrementalRefresh
——我将获得另一个
MarketDataIncrementalRefresh

我不明白我的代码出了什么问题

import static org.testng.Assert.assertEquals;

import org.testng.annotations.Test;

import quickfix.ConfigError;
import quickfix.DataDictionary;
import quickfix.InvalidMessage;
import quickfix.field.MDEntryPx;
import quickfix.field.MDEntrySize;
import quickfix.field.MDEntryType;
import quickfix.field.MDUpdateAction;
import quickfix.field.Symbol;
import quickfix.fix44.MarketDataIncrementalRefresh;
import quickfix.fix44.MarketDataSnapshotFullRefresh;

public class TradeEventToFixMessageConverterTest2 {

    private static final DataDictionary dataDictionary;

    static {
        try {
            dataDictionary = new DataDictionary(TradeEventToFixMessageConverterTest2.class.getResourceAsStream("/conf/FIX44-CUSTOM.xml"));
        } catch (ConfigError configError) {
            throw new ExceptionInInitializerError(configError);
        }
    }

    @Test
    public void rawTest() throws InvalidMessage {
        MarketDataIncrementalRefresh fixMessage = new MarketDataIncrementalRefresh();
        MarketDataSnapshotFullRefresh.NoMDEntries group = new MarketDataSnapshotFullRefresh.NoMDEntries();
        group.setField(new MDUpdateAction(MDUpdateAction.NEW));
        group.setField(new MDEntryType(MDEntryType.TRADE));
        group.setField(new Symbol("123456"));
        group.setField(new MDEntryPx(12345L));
        group.setField(new MDEntrySize(1234.0));
        fixMessage.addGroup(group);

        String fixString = fixMessage.toString();
        System.out.println(fixString);

        MarketDataIncrementalRefresh reversed = createMarketDataRequest(fixString);
        System.out.println(reversed.toString());

        assertEquals(reversed.toString(), fixString);
    }


    private MarketDataIncrementalRefresh createMarketDataRequest(String fixString) throws InvalidMessage {
        MarketDataIncrementalRefresh message = new MarketDataIncrementalRefresh();
        message.fromString(fixString, dataDictionary, true);
        return message;
    }
FIX Dictionary基于standart FIX44,看起来像

<message name="MarketDataIncrementalRefresh" msgtype="X" msgcat="app">
    <field name="MDReqID" required="N"/>
    <group name="NoMDEntries" required="Y">
        <field name="MDUpdateAction" required="Y"/>
        <field name="MDEntryType" required="N"/>
        <field name="MDEntryID" required="N"/>
        <field name="Symbol" required="Y"/>
        <field name="MDEntryPx" required="N"/>
        <field name="MDEntrySize" required="N"/>
    </group>
</message>
我错过了什么?任何帮助都是有用的

更新


这是我的代码输入错误-我构造了
MarketDataIncrementalRefresh
,但添加了
MarketDataSnapshotFullRefresh.NoMDEntries
。我将其更改为
MarketDataIncrementalRefresh.NoMDEntries
,一切正常。

查看
toString()
产生的
修复字符串。我怀疑它实际上可能与您的自定义DataDictionary不匹配,而是使用默认vanilla FIX44.xml字典中的字段顺序构建的

在构建消息的过程中,您不会传入自定义DD。这可能意味着它没有使用它

不幸的是,我的QF/j经验已经过时,我不知道如何或在何处将DD注入消息构造过程。我查看了API,但没有看到它的函数


(当然,我对所有QF用户的一般建议是从自定义DD重新生成和重建代码,这样您就不会有这个问题。)

非常感谢您的帮助!我每样东西都检查了两次,发现了问题。这是我代码中的输入错误-我构造了
MarketDataIncrementalRefresh
,但添加了
MarketDataSnapshotFullRefresh.NoMDEntries
。我将它改为
MarketDataIncrementalRefresh.NoMDEntries
,一切都很好。啊,很好。抢手货
2018-04-23 14:59:54.508 +0000 ERROR [QFJ Message Processor] quickfixj.errorEvent - FIX.4.4:1/Quote->QUICKFIX: Reject sent for Message 2: Out of order repeating group members:269