[QFJ-270] conditionally required field missing message uninformative Created: 10/Dec/07 Updated: 07/Aug/08 Resolved: 18/Jun/08 |
|
Status: | Closed |
Project: | QuickFIX/J |
Component/s: | Engine |
Affects Version/s: | 1.0.4 |
Fix Version/s: | 1.3.2 |
Type: | Improvement | Priority: | Minor |
Reporter: | John Coleman | Assignee: | Unassigned |
Resolution: | Fixed | Votes: | 0 |
Labels: | None | ||
Environment: |
JVM 1.5 on WindowsXP. |
Description |
When messages with conditionally required fields missing are submitted, the rejection message does not specify the tag number of the missing field. This probably needs to be somewhere in tag 58, as tag 371 is not a FIX standard tag for message rejections. |
Comments |
Comment by Steve Bate [ 03/Feb/08 ] |
Can you add some more detail on this issue? At least in the Session implementation, conditionally-required field rejects do include the tag number. For FIX 4.2 and above it is put into tag 371. For older versions, it is included in the Text (58) field. Is this an issue with the Banzai example program? |
Comment by John Coleman [ 04/Feb/08 ] |
I amended the following code in Session.java to resolve the issue: public synchronized void next(Message message) throws FieldNotFound, RejectLogon, else { } private void generateBusinessReject(Message message, int err, int field) throws FieldNotFound, IOException { Message reject = messageFactory.create(sessionID.getBeginString(), MsgType.BUSINESS_MESSAGE_REJECT); initializeHeader(reject.getHeader()); String msgType = message.getHeader().getString(MsgType.FIELD); String msgSeqNum = message.getHeader().getString(MsgSeqNum.FIELD); reject.setString(RefMsgType.FIELD, msgType); reject.setString(RefSeqNum.FIELD, msgSeqNum); reject.setInt(BusinessRejectReason.FIELD, err); state.incrNextTargetMsgSeqNum(); String reason = BusinessRejectReasonText.getMessage(err) + " " + field; populateRejectReason(reject, reason); sendRaw(reject, 0); getLog().onEvent("Message " + msgSeqNum + " Rejected: " + reason); } |