Open gbirchmeier opened 5 years ago
Please see #528 for some further code analysis.
Per this excellent StackOverflow answer by Ciaran McHale, this situation isn't actually FIX compliant.
I may still attempt to fix it anyway, as I've now seen 2 counterparties do it. But it is not a priority, and a better first course of action is to ask your counterparty to correct their implementation.
I hope you are going to fix this soon. Whilst this is not strictly FIX compliant to use the same group tag in different parts of a message, it does happen to be occur in Refinitv's (formally Thomposn Reuters) TRTN data dictionary, and I can't see them agreeing to change it given the large number of firms which have must have been using it for years. It is also handled perfectly well in quickfixJ, and I was hoping to port some exisitng java code to c#, but because of this issue, I am going to have to give up for the time being.
We have the same problem with one of Bloomberg interfaces, I doubt they gonna consider making changes of their side. Looks like C++ implementation of QuickFIX doesnt have such issue.
Ran into this while generating source for TT's DD.
The DD contains the NoSides tag in two different places (it denotes a top-level group, and a nested group inside of a different group).
In their DD:
That's totally legit as far as I know. However, the generator generates this (in Messages\FIX44\MessageFactory.cs):
That function's interface is defined in
QuickFix\IMessageFactory.cs
. Obviously it's a mistake to think that msgtype and group-counter-tag alone are enough to identify the Group.Luckily, the only user of this function is
QuickFix\Message\Message.cs -> SetGroup(...)
, so changing it should not be that disruptive.So, the tasks to solve are:
QuickFix\Message\Message.cs->SetGroup(...)
can pass an ancestry chain to the group-create methodIMessageFactory::Create/group
to take that ancestry chainQuickFix\DefaultMessageFactory.cs->Create/group
per that interface change. It will need to create the right group based on the ancestry chain.Messages\FIXxx\MessageFactory.cs->Create/group
methods. Generated methods will need to create the right group based on that ancestry chain.