You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Gary Tully (JIRA)" <ji...@apache.org> on 2010/02/01 10:31:32 UTC

[jira] Updated: (AMQ-2548) Downloading Blob messages via FTP fails for files larger than 64KB

     [ https://issues.apache.org/activemq/browse/AMQ-2548?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gary Tully updated AMQ-2548:
----------------------------

    Fix Version/s: 5.3.1

merged to 5.3.1 branch in r905219

> 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
>            Assignee: Timothy Bish
>            Priority: Minor
>             Fix For: 5.3.1, 5.4.0
>
>
> 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.FTPBlobDownloadStrategy 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.