@@ -49,9 +49,20 @@ package <xsl:value-of select="$messagePackage"/>;
4949
5050import quickfix.*;
5151import <xsl : value-of select =" $fieldPackage" />.*;
52+ import java.util.HashMap;
5253
5354public class MessageCracker {
5455
56+ private final HashMap< String, MessageConsumer> methodRegistry = new HashMap<> ();
57+ private final MessageConsumer defaultFunction = this::onMessage;
58+
59+ public MessageCracker() {
60+ <xsl : for-each select =" //fix/messages/message" >
61+ methodRegistry.put(<xsl : value-of select =" @name" />.MSGTYPE,
62+ (message, sessionID) -> onMessage((<xsl : value-of select =" @name" />) message, sessionID));
63+ </xsl : for-each >
64+ }
65+
5566 /**
5667 * Callback for quickfix.Message message.
5768 *
@@ -116,13 +127,13 @@ public class MessageCracker {
116127 throws UnsupportedMessageType, FieldNotFound, IncorrectTagValue {
117128
118129 String type = message.getHeader().getString(MsgType.FIELD);
130+ methodRegistry.getOrDefault(type, defaultFunction).accept(message, sessionID);
131+ }
119132
120- <xsl : for-each select =" //fix/messages/message" >
121- <xsl : if test =" position()!=1" >
122- else </xsl : if >if (type.equals(<xsl : value-of select =" @name" />.MSGTYPE))
123- onMessage((<xsl : value-of select =" @name" />)message, sessionID);</xsl : for-each >
124- else
125- onMessage(message, sessionID);
133+ @FunctionalInterface
134+ private interface MessageConsumer {
135+ void accept(Message message, SessionID sessionID)
136+ throws UnsupportedMessageType, IncorrectTagValue, FieldNotFound;
126137 }
127138</xsl : template >
128139
0 commit comments