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.