Skip to content

Commit 06c312e

Browse files
authored
Merge pull request #129 from quickfix-j/ordermatch-application
added some missing cases to Ordermatch application, prevent NPE
2 parents 947db8c + bb8b313 commit 06c312e

File tree

1 file changed

+43
-5
lines changed
  • quickfixj-examples/ordermatch/src/main/java/quickfix/examples/ordermatch

1 file changed

+43
-5
lines changed

quickfixj-examples/ordermatch/src/main/java/quickfix/examples/ordermatch/Application.java

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,17 @@
5555
import quickfix.field.TimeInForce;
5656
import quickfix.fix42.ExecutionReport;
5757
import quickfix.fix42.MarketDataRequest;
58+
import quickfix.fix42.MarketDataSnapshotFullRefresh;
5859
import quickfix.fix42.NewOrderSingle;
5960
import quickfix.fix42.OrderCancelRequest;
6061

6162
import java.util.ArrayList;
63+
import quickfix.field.CxlRejResponseTo;
64+
import quickfix.field.MDEntryPx;
65+
import quickfix.field.MDEntryType;
66+
import quickfix.field.MDReqID;
67+
import quickfix.field.OrdRejReason;
68+
import quickfix.fix42.OrderCancelReject;
6269

6370
public class Application extends MessageCracker implements quickfix.Application {
6471
private final OrderMatcher orderMatcher = new OrderMatcher();
@@ -103,7 +110,7 @@ public void onMessage(NewOrderSingle message, SessionID sessionID) throws FieldN
103110

104111
processOrder(order);
105112
} catch (Exception e) {
106-
rejectOrder(senderCompId, targetCompId, clOrdId, symbol, side, e.getMessage());
113+
rejectOrder(targetCompId, senderCompId, clOrdId, symbol, side, e.getMessage());
107114
}
108115
}
109116

@@ -117,6 +124,7 @@ private void rejectOrder(String senderCompId, String targetCompId, String clOrdI
117124

118125
fixOrder.setString(ClOrdID.FIELD, clOrdId);
119126
fixOrder.setString(Text.FIELD, message);
127+
fixOrder.setInt(OrdRejReason.FIELD, OrdRejReason.BROKER_EXCHANGE_OPTION);
120128

121129
try {
122130
Session.sendToTarget(fixOrder, senderCompId, targetCompId);
@@ -187,9 +195,23 @@ public void onMessage(OrderCancelRequest message, SessionID sessionID) throws Fi
187195
char side = message.getChar(Side.FIELD);
188196
String id = message.getString(OrigClOrdID.FIELD);
189197
Order order = orderMatcher.find(symbol, side, id);
190-
order.cancel();
191-
cancelOrder(order);
192-
orderMatcher.erase(order);
198+
if (order != null) {
199+
order.cancel();
200+
cancelOrder(order);
201+
orderMatcher.erase(order);
202+
} else {
203+
OrderCancelReject fixOrderReject = new OrderCancelReject(new OrderID("NONE"), new ClOrdID(message.getString(ClOrdID.FIELD)),
204+
new OrigClOrdID(message.getString(OrigClOrdID.FIELD)), new OrdStatus(OrdStatus.REJECTED), new CxlRejResponseTo(CxlRejResponseTo.ORDER_CANCEL_REQUEST));
205+
206+
String senderCompId = message.getHeader().getString(SenderCompID.FIELD);
207+
String targetCompId = message.getHeader().getString(TargetCompID.FIELD);
208+
fixOrderReject.getHeader().setString(SenderCompID.FIELD, targetCompId);
209+
fixOrderReject.getHeader().setString(TargetCompID.FIELD, senderCompId);
210+
try {
211+
Session.sendToTarget(fixOrderReject, targetCompId, senderCompId);
212+
} catch (SessionNotFound e) {
213+
}
214+
}
193215
}
194216

195217
public void onMessage(MarketDataRequest message, SessionID sessionID) throws FieldNotFound,
@@ -204,10 +226,26 @@ public void onMessage(MarketDataRequest message, SessionID sessionID) throws Fie
204226
//int marketDepth = message.getInt(MarketDepth.FIELD);
205227
int relatedSymbolCount = message.getInt(NoRelatedSym.FIELD);
206228

229+
MarketDataSnapshotFullRefresh fixMD = new MarketDataSnapshotFullRefresh();
230+
fixMD.setString(MDReqID.FIELD, message.getString(MDReqID.FIELD));
231+
207232
for (int i = 1; i <= relatedSymbolCount; ++i) {
208233
message.getGroup(i, noRelatedSyms);
209234
String symbol = noRelatedSyms.getString(Symbol.FIELD);
210-
System.err.println("*** market data: " + symbol);
235+
fixMD.setString(Symbol.FIELD, symbol);
236+
}
237+
238+
MarketDataSnapshotFullRefresh.NoMDEntries noMDEntries = new MarketDataSnapshotFullRefresh.NoMDEntries();
239+
noMDEntries.setChar(MDEntryType.FIELD, '0');
240+
noMDEntries.setDouble(MDEntryPx.FIELD, 123.45);
241+
fixMD.addGroup(noMDEntries);
242+
String senderCompId = message.getHeader().getString(SenderCompID.FIELD);
243+
String targetCompId = message.getHeader().getString(TargetCompID.FIELD);
244+
fixMD.getHeader().setString(SenderCompID.FIELD, targetCompId);
245+
fixMD.getHeader().setString(TargetCompID.FIELD, senderCompId);
246+
try {
247+
Session.sendToTarget(fixMD, targetCompId, senderCompId);
248+
} catch (SessionNotFound e) {
211249
}
212250
}
213251

0 commit comments

Comments
 (0)