class MessageCracker {

    public void crack(quickfix.Message message, SessionID sessionID) throws UnsupportedMessageType,
            FieldNotFound, IncorrectTagValue {
        Invoker invoker = invokers.get(message.getClass());
        if (invoker != null) {
            try {
                invoker.Invoke(message, sessionID);
            } catch (InvocationTargetException ite) {
                try {
                    throw ((InvocationTargetException)ite).getTargetException();
                }
                catch (UnsupportedMessageType e) {
                    throw e;
                }
                catch (FieldNotFound e) {
                    throw e;
                }
                catch (IncorrectTagValue e) {
                    throw e;
                }
                catch (Throwable t) {
                    propagate(t);
                }
            }
            catch (Exception e) {
                propagate(e);
            }
        } else {
            onMessage(message, sessionID);
        }
    }

    protected  MessageCracker();
    public  MessageCracker(Object messageHandler);

}