Downloading Blob messages via FTP fails for files larger than 64KB ------------------------------------------------------------------
Key: AMQ-2548 URL: https://issues.apache.org/activemq/browse/AMQ-2548 Project: ActiveMQ Issue Type: Bug Affects Versions: 5.3.0 Environment: OS: Windows XP Reporter: Antun Pendo Priority: Minor The following code will only download 64 KB of any uploaded file greater than 64 KB. The test file (ca. 15 MB) was completly uploaded to the FTP-Server. {code} File file = new File(directoryName+fileName); ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(URI); Connection connection = factory.createQueueConnection(); connection.start(); ActiveMQSession session = (ActiveMQSession) connection.createSession( false, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue("MyQ"); MessageProducer producer = session.createProducer(destination); MessageConsumer consumer = session.createConsumer(destination); BlobMessage message = session.createBlobMessage(file); producer.send(message); System.out.println("Sent: " + message); Thread.sleep(1000); // check message sent Message msg = consumer.receive(); BlobDownloadStrategy strategy = new FTPBlobDownloadStrategy(); InputStream input = strategy.getInputStream((ActiveMQBlobMessage)msg); File f=new File(fileName); OutputStream out=new FileOutputStream(f); byte buf[]=new byte[1024]; int len; while((len=input.read(buf))>0){ out.write(buf,0,len); } out.close(); input.close(); System.out.println("Received: " + message); {code} After examining org.apache.activemq.blob.DefaultBlobUploadStrategy it seemed suspicious that the FTPClient connection was destroyed before the input stream is processed. {code} public InputStream getInputStream(ActiveMQBlobMessage message) throws IOException, JMSException { URL url = message.getURL(); setUserInformation(url.getUserInfo()); String connectUrl = url.getHost(); int port = url.getPort() < 1 ? 21 : url.getPort(); FTPClient ftp = new FTPClient(); try { ftp.connect(connectUrl, port); } catch(ConnectException e) { throw new JMSException("Problem connecting the FTP-server"); } if(!ftp.login(ftpUser, ftpPass)) { ftp.quit(); ftp.disconnect(); throw new JMSException("Cant Authentificate to FTP-Server"); } String path = url.getPath(); String workingDir = path.substring(0, path.lastIndexOf("/")); String file = path.substring(path.lastIndexOf("/")+1); ftp.changeWorkingDirectory(workingDir); ftp.setFileType(FTPClient.BINARY_FILE_TYPE); InputStream input = ftp.retrieveFileStream(file); ftp.quit(); // really? ftp.disconnect(); // really? return input; } {code} After commenting those two last ftp calls, files larger than 64 KB were downloaded properly, but this should of course not be the final solution. Any suggestions? Cheers, Toni -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.