List of usage examples for org.springframework.messaging MessageDeliveryException MessageDeliveryException
public MessageDeliveryException(Message<?> undeliveredMessage, String description, Throwable cause)
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); } }