2014-02-19 51 views
0

我正在開發JAX-WS Web服務以從SFTP站點下載文件。我使用下面的代碼來讀取文件。從SFTP站點下載文件 - 將InputStream轉換爲DataHandler的問題

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

其返回java.io.InputStream的對象。該對象需要由Web服務作爲DataHandler對象返回。

要做到這一點,我創建了一個類InputStreamDataSource它實現DataSource,並用它來創建的DataHander的對象

returnFile = new DataHandler(new InputStreamDataSource(inputStream)); 
而這又是由Web方法返回

現在,通過啓用MTOM從SoapUI運行代碼,我得到以下輸出。

SoapUI Output

請在附件中指出,文件的大小爲0,文件名也不是特定的。

這是什麼可能的原因和一個合適的解決方法來克服這個問題?

該文件需要不使用java.io.File對象返回作爲DataHandler本身(作爲附件)。另外我想避免使用任何第三方jar。

回答

0

我能夠通過使用byte數組創建DataHandler來解決問題。

  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");