Details
Description
QuickFIX configuration flag ValidateFieldsOutOfOrder=N has been applied. Although QuickFIX/J should ignore field ordering on all repeating group levels (as specified by ValidateFieldsOutOfOrder=N), some session rejects from the engine have been observed by the clients and in internal test, which reject FIX messages because of improper field ordering (example: reversed order of PartyIDSource (447) and PartyRole (452) in the Parties group). After reviewing the QuickFIX/J source code, it has been established that the cause of the problem is that the flag is not propagated properly to second and higher groups levels in the recursive validation of the FIX message.
Fixed: propagate the flag properly.
public void setCheckFieldsHaveValues(boolean flag) {
checkFieldsHaveValues = flag;
for(GroupInfo gi : groups.values()) { // ******* ADDED *******
gi.getDataDictionary().setCheckFieldsHaveValues(flag);
}
}
(Internal reference: IC_58606)
Fixed: propagate the flag properly.
public void setCheckFieldsHaveValues(boolean flag) {
checkFieldsHaveValues = flag;
for(GroupInfo gi : groups.values()) { // ******* ADDED *******
gi.getDataDictionary().setCheckFieldsHaveValues(flag);
}
}
(Internal reference: IC_58606)
Issue Links
| This issue is duplicated by: | ||||
| QFJ-546 | Nested Group do not support 'ValidateFieldsOutOfOrder' configure |
|
|
|
This is a misunderstanding of the documented purpose of the ValidateFieldsOutOfOrder flag: "If set to N, fields that are out of order (i.e. body fields in the header, or header fields in the body) will not be rejected.". It is not related at all to group field ordering or and field ordering other than specific header fields. This option was inherited from the QuickFIX C++ implementation.