2014-02-19 1 views
0

Я разрабатываю веб-службу JAX-WS для загрузки файла с сайта SFTP. Я использую следующий код для чтения файла.Загрузка файла с сайта SFTP - Проблема с преобразованием InputStream в DataHandler

channelSftp.cd(sftpHostPath); //sftpHostPath = Path from where file is to be downloaded 
inputStream = channelSftp.get(fileName + "." + fileExtn); 

, который возвращает объект java.io.InputStream. Этот объект должен быть возвращен веб-службой как объект DataHandler.

Для достижения этой цели, я создал класс, который реализует InputStreamDataSourceDataSource и использовал его для создания объекта DataHander в

returnFile = new DataHandler(new InputStreamDataSource(inputStream)); 

, который, в свою очередь, возвращенный веб-методе.

Теперь, запустив код из SoapUI, включив MTOM, я получаю следующий вывод.

SoapUI Output

Пожалуйста, обратите внимание, в приложении, что размер файла 0 и имя файла также не специфичен.

Какова возможная причина этого и подходящий обходной путь для решения проблемы?

ПРИМЕЧАНИЕ: Файл должен быть возвращен в DataHandler сама (как вложение) без использования java.io.File объекта. Также я хочу избежать использования любой сторонней банки.

ответ

0

Я смог решить проблему, создав DataHandler с использованием массива byte.

  buffer = new byte[1024]; 
      bufferedInputStream = new BufferedInputStream(inputStream); 
      byteArrayOutputStream = new ByteArrayOutputStream(); 
      while((readCount = bufferedInputStream.read(buffer)) > 0) { 
       byteArrayOutputStream.write(buffer, 0, readCount); 
      } 
      returnFile = new DataHandler(byteArrayOutputStream.toByteArray(), "application/octet-stream");