2015-06-05 80 views
1

我有一個方法processData()它試圖利用jschput()文件送過來sftp之前獲得成品filepathSystem.Xml.XmlException:文件意外結束在解析

class Processer { 

public void processData() { 

       Path fileToSend = writer.buildFile(data, users, str); 
       try { 
        sender.connect(); 
        if (sender.send(fileToSend)) { 
        } else { 
         logger.error("Upload Failed"); 
        } 
       } catch (JSchException e) { 
        //log error 
       } finally { 
        sender.dispose(); 
       }     
    } 

} 

class WriterClass { 

    public Path buildFile(Map<String, List<Data>> data, Map<String, User> users) { 

     XMLOutputFactory factory = XMLOutputFactory.newInstance(); 
     XMLStreamWriter writer = null; 
     Path filePath = Paths.get(outputDir); 
     Path fileDir = null; 
     Path file = null; 

     try { 
      fileDir = Files.createDirectories(filePath); 
     } catch (IOException e) { 
      logger.error("IO error {}", e); 
     } 

     try { 

      file = Paths.get(fileDir.toString(), date + ".XML"); 
      writer = new IndentingXMLStreamWriter(factory.createXMLStreamWriter(new FileWriter(file.toFile()))); 

      writer.writeStartDocument(); 
      writer.writeStartElement("OPEN"); 

      //for each entry in set 
      writeDetail(writer, data); //writes character data 

      writer.writeEndElement(); 
      writer.writeEndDocument(); 
      writer.flush(); 
      writer.close(); 

     } catch (XMLStreamException e) { 
      logger.error(e.getMessage()); 
     } catch (IOException ex) { 
      logger.error(ex.getMessage()); 
     } 

     return file; 
    } 

} 

當文件在對面SFTP被轉移,該xml文件不完整的遠程位置,並且不能進行解析。它在當地的道路上顯得完整。任何人都可以指出,如果我遺漏了任何東西或者writer對象關閉或沖洗不正確?

回答

0

我想通了,沒有被髮送的文件全是因爲在jsch SftpProgressMonitorcount()方法,返航false的原因。當週期性地調用count()方法時,它應該返回true來完成傳輸。 See Here