class GetFirmwareFileResponseMessageProcessor extends OsgpResponseMessageProcessor {

    @SuppressWarnings("squid:S1193") // SilentException cannot be caught since it does not extend Exception.
    @Override
    public void processMessage(final ObjectMessage message) throws JMSException {
        LOGGER.debug("Processing {} response message", this.messageType.name());
        MessageMetadata messageMetadata = null;

        DlmsConnectionManager conn = null;
        DlmsDevice device = null;

        try {
            // Get metadata from message and update message type to update
            // firmware
            messageMetadata = new MessageMetadata.Builder(MessageMetadata.fromMessage(message)).withMessageType(
                    MessageType.UPDATE_FIRMWARE.name()).build();

            device = this.domainHelperService.findDlmsDevice(messageMetadata);

            LOGGER.info("{} called for device: {} for organisation: {}", message.getJMSType(),
                    messageMetadata.getDeviceIdentification(), messageMetadata.getOrganisationIdentification());

            final Serializable response;
            conn = this.createConnectionForDevice(device, messageMetadata);
            response = this.handleMessage(conn, device, message.getObject());

            // Send response
            this.sendResponseMessage(messageMetadata, ResponseMessageResultType.OK, null, this.responseMessageSender,
                    response);

        } catch (final JMSException exception) {
            this.logJmsException(LOGGER, exception, messageMetadata);
        } catch (final Exception exception) {
            // Return original request + exception
            if (!(exception instanceof SilentException)) {
                LOGGER.error("Unexpected exception during {}", this.messageType.name(), exception);
            }

            this.sendResponseMessage(messageMetadata, ResponseMessageResultType.NOT_OK, exception,
                    this.responseMessageSender, message.getObject());
        } finally {
            this.doConnectionPostProcessing(device, conn);
        }
    }

    protected  GetFirmwareFileResponseMessageProcessor();

}