Example usage for org.springframework.messaging MessageDeliveryException MessageDeliveryException

List of usage examples for org.springframework.messaging MessageDeliveryException MessageDeliveryException

Introduction

In this page you can find the example usage for org.springframework.messaging MessageDeliveryException MessageDeliveryException.

Prototype

public MessageDeliveryException(Message<?> undeliveredMessage, String description, Throwable cause) 

Source Link

Usage

From source file:org.springframework.integration.file.remote.RemoteFileTemplate.java

private String send(final Message<?> message, final String subDirectory, final FileExistsMode mode) {
    Assert.notNull(this.directoryExpressionProcessor, "'remoteDirectoryExpression' is required");
    Assert.isTrue(!FileExistsMode.APPEND.equals(mode) || !this.useTemporaryFileName,
            "Cannot append when using a temporary file name");
    Assert.isTrue(!FileExistsMode.REPLACE_IF_MODIFIED.equals(mode),
            "FilExistsMode.REPLACE_IF_MODIFIED can only be used for local files");
    final StreamHolder inputStreamHolder = this.payloadToInputStream(message);
    if (inputStreamHolder != null) {
        try {/* ww  w. j a v a 2 s .c o  m*/
            return this.execute(session -> {
                String fileName = inputStreamHolder.getName();
                try {
                    String remoteDirectory = RemoteFileTemplate.this.directoryExpressionProcessor
                            .processMessage(message);
                    remoteDirectory = RemoteFileTemplate.this.normalizeDirectoryPath(remoteDirectory);
                    if (StringUtils.hasText(subDirectory)) {
                        if (subDirectory.startsWith(RemoteFileTemplate.this.remoteFileSeparator)) {
                            remoteDirectory += subDirectory.substring(1);
                        } else {
                            remoteDirectory += RemoteFileTemplate.this.normalizeDirectoryPath(subDirectory);
                        }
                    }
                    String temporaryRemoteDirectory = remoteDirectory;
                    if (RemoteFileTemplate.this.temporaryDirectoryExpressionProcessor != null) {
                        temporaryRemoteDirectory = RemoteFileTemplate.this.temporaryDirectoryExpressionProcessor
                                .processMessage(message);
                    }
                    fileName = RemoteFileTemplate.this.fileNameGenerator.generateFileName(message);
                    RemoteFileTemplate.this.sendFileToRemoteDirectory(inputStreamHolder.getStream(),
                            temporaryRemoteDirectory, remoteDirectory, fileName, session, mode);
                    return remoteDirectory + fileName;
                } catch (FileNotFoundException e) {
                    throw new MessageDeliveryException(message, "File [" + inputStreamHolder.getName()
                            + "] not found in local working directory; it was moved or deleted unexpectedly.",
                            e);
                } catch (IOException e) {
                    throw new MessageDeliveryException(message,
                            "Failed to transfer file [" + inputStreamHolder.getName() + " -> " + fileName
                                    + "] from local directory to remote directory.",
                            e);
                } catch (Exception e) {
                    throw new MessageDeliveryException(message, "Error handling message for file ["
                            + inputStreamHolder.getName() + " -> " + fileName + "]", e);
                }
            });
        } finally {
            try {
                inputStreamHolder.getStream().close();
            } catch (IOException e) {
            }
        }
    } else {
        // A null holder means a File payload that does not exist.
        if (this.logger.isWarnEnabled()) {
            this.logger.warn("File " + message.getPayload() + " does not exist");
        }
        return null;
    }
}

From source file:org.springframework.integration.file.remote.RemoteFileTemplate.java

private StreamHolder payloadToInputStream(Message<?> message) throws MessageDeliveryException {
    try {//w  ww .  ja  v a 2s . co  m
        Object payload = message.getPayload();
        InputStream dataInputStream = null;
        String name = null;
        if (payload instanceof InputStream) {
            dataInputStream = (InputStream) payload;
        } else if (payload instanceof File) {
            File inputFile = (File) payload;
            if (inputFile.exists()) {
                dataInputStream = new BufferedInputStream(new FileInputStream(inputFile));
                name = inputFile.getAbsolutePath();
            }
        } else if (payload instanceof byte[] || payload instanceof String) {
            byte[] bytes = null;
            if (payload instanceof String) {
                bytes = ((String) payload).getBytes(this.charset);
                name = "String payload";
            } else {
                bytes = (byte[]) payload;
                name = "byte[] payload";
            }
            dataInputStream = new ByteArrayInputStream(bytes);
        } else {
            throw new IllegalArgumentException("Unsupported payload type. The only supported payloads are "
                    + "java.io.File, java.lang.String, byte[] and InputStream");
        }
        if (dataInputStream == null) {
            return null;
        } else {
            return new StreamHolder(dataInputStream, name);
        }
    } catch (Exception e) {
        throw new MessageDeliveryException(message, "Failed to create sendable file.", e);
    }
}

From source file:org.springframework.messaging.support.AbstractMessageChannel.java

@Override
public final boolean send(Message<?> message, long timeout) {
    Assert.notNull(message, "Message must not be null");
    Message<?> messageToUse = message;
    ChannelInterceptorChain chain = new ChannelInterceptorChain();
    boolean sent = false;
    try {/*  w w  w . j  av  a 2s .c om*/
        messageToUse = chain.applyPreSend(messageToUse, this);
        if (messageToUse == null) {
            return false;
        }
        sent = sendInternal(messageToUse, timeout);
        chain.applyPostSend(messageToUse, this, sent);
        chain.triggerAfterSendCompletion(messageToUse, this, sent, null);
        return sent;
    } catch (Exception ex) {
        chain.triggerAfterSendCompletion(messageToUse, this, sent, ex);
        if (ex instanceof MessagingException) {
            throw (MessagingException) ex;
        }
        throw new MessageDeliveryException(messageToUse, "Failed to send message to " + this, ex);
    } catch (Throwable err) {
        MessageDeliveryException ex2 = new MessageDeliveryException(messageToUse,
                "Failed to send message to " + this, err);
        chain.triggerAfterSendCompletion(messageToUse, this, sent, ex2);
        throw ex2;
    }
}

From source file:org.springframework.messaging.support.channel.AbstractMessageChannel.java

@Override
public final boolean send(Message<?> message, long timeout) {

    Assert.notNull(message, "Message must not be null");
    if (logger.isTraceEnabled()) {
        logger.trace("[" + this.beanName + "] sending message " + message);
    }//from w ww. ja v  a  2 s .  co  m

    message = this.interceptorChain.preSend(message, this);
    if (message == null) {
        return false;
    }

    try {
        boolean sent = sendInternal(message, timeout);
        this.interceptorChain.postSend(message, this, sent);
        return sent;
    } catch (Exception e) {
        if (e instanceof MessagingException) {
            throw (MessagingException) e;
        }
        throw new MessageDeliveryException(message,
                "Failed to send message to channel '" + this.getBeanName() + "'", e);
    }
}