class HandlerRoutingReceiver implements IMessageReceiver {

    @Override
    public void receive(final IMessageProcessor processor)
            throws MessageReceiveException, AsynchronousOperationException {
        try {
            Object handlerId = handlerField.in(processor.getSequence().getCurrentReceiverArguments());
            IMessageReceiver handlerReceiver = handlerReceiversMap.get(handlerId);

            if (null == handlerReceiver) {
                throw new MessageReceiveException("Handler not found.");
            } else {
                handlerReceiver.receive(processor);
            }
        } catch (ReadValueException | InvalidArgumentException e) {
            throw new MessageReceiveException("Error reading handler name.");
        }
    }

    public  HandlerRoutingReceiver(final Map<Object, IMessageReceiver> handlerReceiversMap);

}