All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.shinesolutions.aemorchestrator.handler.SqsMessageHandler Maven / Gradle / Ivy

Go to download

Java application for orchestrating AEM infrastructure created using aem-aws-stack-builder

There is a newer version: 4.0.0
Show newest version
package com.shinesolutions.aemorchestrator.handler;

import java.util.Map;

import javax.annotation.Resource;
import javax.jms.Message;
import javax.jms.TextMessage;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.shinesolutions.aemorchestrator.exception.MessageHandlerNotFoundException;
import com.shinesolutions.aemorchestrator.model.SnsMessage;
import com.shinesolutions.aemorchestrator.util.SnsMessageExtractor;

/*
 * Invokes the correct action based on the message type (taken from subject)
 */
@Component
public class SqsMessageHandler {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Resource
    private Map eventTypeHandlerMappings;
    
    @Resource
    private SnsMessageExtractor snsMessageExtractor;

    public boolean handleMessage(Message message) {
        
        boolean deleteMessage = false;
        SnsMessage snsMessage = null;
        
        try {
            String messageBody = ((TextMessage)message).getText();
            logger.debug("Raw message body: " + messageBody); 
                
            snsMessage = snsMessageExtractor.extractMessage(messageBody);
            
        } catch (Exception e) {
            logger.error("Error when attempting to read message", e);
            deleteMessage = true;
        }

        if(snsMessage != null && snsMessage.getSubject() != null) {
            // Get class mapping for message type:
            MessageHandler eventHandler = null;
            try {
                eventHandler = getHandler(snsMessage.getSubject());
            } catch (MessageHandlerNotFoundException e) {
                logger.error("Failed to find message handler", e);
            }
    
            if (eventHandler != null) {
                try {
                    logger.debug("Handling event for subject: " + snsMessage.getSubject());
                    deleteMessage = eventHandler.handleEvent(prepareMessageBody(snsMessage.getMessage()));
                    
                } catch (Exception e) {
                    logger.error("Failed to handle event for message with subject: " + snsMessage.getSubject(), e);
                }
            } else {
                deleteMessage = true;
            }
        }

        return deleteMessage;
    }
    
    private MessageHandler getHandler(String msgSubject) throws MessageHandlerNotFoundException {
        String key = eventTypeHandlerMappings.keySet().stream().filter(
            m -> msgSubject.startsWith(m)).findFirst().orElseThrow(() -> new MessageHandlerNotFoundException(msgSubject));
        logger.debug("Using Message Handler for key: " + key);
        return eventTypeHandlerMappings.get(key);
    }
    
    private String prepareMessageBody(String messageBody) {
        // Body contains \" instead of just ". Need to replace before attempting to map to object
        return messageBody.replace("\\\"", "\"");
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy