mrb*_*ela 5 java quickfix fix-protocol quickfixj
我正在编写一个使用QuickFIX/J作为FIX框架的应用程序.我的对手向我ExecutionReport
发送了FIX版本4.4 的消息但是只有一些字段(Parties
组件)是版本5.0
现在我试图实现我可以阅读这个组件.
这个
@Override
public void onMessage(quickfix.fix44.ExecutionReport message, SessionID sessionID)
throws FieldNotFound, UnsupportedMessageType, IncorrectTagValue {
quickfix.fix50.component.Parties parties = new Parties();
message.get(parties);
// ...
}
Run Code Online (Sandbox Code Playgroud)
不起作用!消息来自版本4.4,这就是为什么message.get(...)
只需要quickfix.fix44.component.Parties
一个版本5.0而不是版本5.0
如果我试试这个
@Override
public void onMessage(quickfix.fix50.ExecutionReport message, SessionID sessionID)
throws FieldNotFound, UnsupportedMessageType, IncorrectTagValue {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Exception in thread "pool-2-thread-1" java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
quickfix/fix44/ExecutionReport.get(Lquickfix/field/SettlType;)Lquickfix/field/SettlType; @2: invokevirtual
Reason:
Type 'quickfix/field/SettlType' (current frame, stack[1]) is not assignable to 'quickfix/CharField'
Current Frame:
bci: @2
flags: { }
locals: { 'quickfix/fix44/ExecutionReport', 'quickfix/field/SettlType' }
stack: { 'quickfix/fix44/ExecutionReport', 'quickfix/field/SettlType' }
Bytecode:
0000000: 2a2b b600 5657 2bb0
at quickfix.fix44.MessageFactory.create(MessageFactory.java:195)
at quickfix.DefaultMessageFactory.create(DefaultMessageFactory.java:133)
at quickfix.MessageUtils.parse(MessageUtils.java:145)
at quickfix.mina.AbstractIoHandler.messageReceived(AbstractIoHandler.java:118)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:854)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:943)
at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:405)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:235)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:943)
at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:109)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:535)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:714)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:668)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:657)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:67)
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1121)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
这是因为我得到了4.4个字段,但是想要像4.4版本一样对待它们.看这里
也许任何人都可以帮助我......
谢谢你的努力!!
TT.*_*TT. 10
一种方法是自定义数据字典FIX4.4.xml并替换其中有时可能是FIX 5.0格式的字段.例如,从FIX5.0.xml复制它们并将它们放在FIX4.4.xml中的正确消息中.
最简单的定制是仅修改一个或多个数据字典(例如,FIX44.xml)并重建QFJ.这允许您添加自定义字段,定义未包含在规范中的新消息,更改字段是必需的还是可选的,等等.
然后重建QuickFIX/J以反映这些更改.
查看QuickFIX/J用户常见问题解答,了解如何重建QuickFIX/J(编辑:版本1.5.x):
你需要安装蚂蚁.
QF/J从core/src/main/resources中的DD生成源.备份你要改变的那个,然后根据需要改变它.
然后重建如下:
- 蚂蚁罐子
- 系统将提示您输入版本号; 这只是确定给jar名称的后缀.输入你想要的任何东西
- 等待构建完成
- 在core/target /找到你全新的QF/J罐子
在FAQ(我如何重建QF/J)中稍微进一步调用ANT更具体:
该
FIX4.4.xml
参数只是一个文件名后缀.该FIX5.0.xml
参数是可选的,将跳过一些耗时的doc生成.ant version = SOME_STRING -Dskip.jalopy = true clean jar
对于1.6.0版本,使用Maven完成构建.
如果要从命令行构建代码,则需要下载并安装Maven(版本3.2.5或更高版本).如果您使用IDE构建,通常会包含Maven.从源代码构建需要Java 6+.
- 查看GitHub的代码.有关克隆存储库的更多详细信息,请参阅GitHub上的说明.
- 将目录更改为签出代码的顶级目录.您应该看到一个pom.xml文件.
- 运行
FIX4.4.xml
以构建QuickFIX/J和示例jar文件.这也将为各种FIX版本生成所有与FIX消息相关的代码.- 对于价格和数量等字段,代码生成器可以选择使用BigDecimal而不是double.要启用此功能,请在运行generate.code目标时在命令行上传递-Dgenerator.decimal选项.
您可以将各种命令行开关传递给ant以修改生成的行为:
Switch Description Default
-Dgenerator.decimal Generate BigDecimal vs doubles fields false
-DskipAT=true Skip running of acceptance test suite. false
Run Code Online (Sandbox Code Playgroud)
例如,为了生成具有BigDecimals的字段并跳过验收测试:
mvn test -Dgenerator.decimal=true -DskipAT=true
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2309 次 |
最近记录: |