Session level "Reject" and application level "BusinessMessageReject" messages make order management more complicated.
For example, a buy side application sent a new order to the sell side. The sell side session message validator (or custom Visual Lambda rules) may rejec the message at the session level. In this case, a "Reject" FIX message is sent to the buy side. And the sell side application will never have a chance to see the message (because it was rejected at the session level without having a chance to reach the application level).
In order to receive events related to session level rejects. Application is required to implement an FIXSessionOrderManagerSessionRejectListener interface.
Listener can be added to or removed from a FIXSessionOrderManager instance by calling FIXSessionOrderManager.addSessionRejectListener() and
In QWFIX, session level rejects are properly handled for the following FIX messages:
|FIX Message Type||Event on Buy Side||Description|
|New Order Single||sessionRejectedOrder||The "OrdStatus" of the order is changed to "Reject" on buy side. Sell side won't see the order.|
|Order Cancel Request||sessionRejectedCancel||The "Cancel Request" message is removed from pending order list on buy side. Sell side won't see the cancel request.|
|Order Cancel/Replace Request||sessionRejectedReplace||The "Cancel/Replace Request" message is removed from pending order list on buy side. Sell side won't see the replace request.|
|Execution Report||sessionRejectedExecution||The "Execution" from sell side is rejected. Buy side never have chance to see it.|
|Order Cancel Reject||sessionRejectedCxlReject||The "Cancel Reject" from sell side is rejected. Buy side never have chance to see it.|
|Order Status Request||sessionRejectedStatusRequest||The "Order Status Request" message is rejected. Sell side won't see the request.|
Note the reject should not happen in production environment. It indicates the problematic implementation of business logic. In QWFIX we do our best to minimize the impact of the problem. In the mean time, error alert messages will be written to the log, which is accessible through our GUI based management tool, QWRTAnalyzer.
Business Message Reject only generates an entry in the alert event log. We recommend using "Business Message Reject" to reject invalid messages related to list and cross orders. However, it's up to our clients how to implement the logic because it's not part of the standard FIX specification.
Teraspaces will work closely with our clients to add their custom error handling business logic into our order management component.
The QWFIX Order Manager runtime wil automatically correct the order status when a message is rejected on the session level.
For example, if an order is send and rejected by the counter party on the session level, not only a sessionRejectedOrder event will be triggered. The "OrdStatus" of the order will automatically be changed to "Rejected". And a FIXSessionOrderManagerSimplifiedListener.orderUpdated event will be triggered as well.
The same thing happens when a "Cancel Request" or "Cance/Replace Request" is rejected on session level. Those request will be removed from pending requests. The effect is the same as that of a "Cancel Reject".