JSch 没有将完整文件上传到远程 SFTP 服务器,只有部分文件

JSch not uploading complete file to remote SFTP server, only partial

我正在尝试使用 Jsch 库将本地创建的 XML 文件(使用 JAXB 从 Java 对象编组)传输到远程服务器。但是,该文件仅部分上传。它缺少结束标记和末尾任意数量的字符。

我的代码如下所示(TradeLimits 是一个带注释的 JAXB Java class)

TradeLimits limits = getTradeLimits(); //complex object with many fields
JSch jsch = new JSch();
jschSession = jsch.getSession(username, remoteHost);

//to avoid unknown host issues
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
jschSession.setConfig(config);

jschSession.setPassword(password);
jschSession.setPort(22);
jschSession.connect();

ChannelSftp channelSftp = (ChannelSftp) jschSession.openChannel("sftp");
channelSftp.connect();

jaxbContext = JAXBContext.newInstance(TradeLimits.class);           
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //for pretty print
marshaller.marshal(limits, channelSftp.put(limitUploadPathString)); //this uploads only partial xml file to sftp server
marshaller.marshal(limits, System.err)); //THIS WORKS CORRECTLY AND THE FULL XML IS PRINTED!        

channelSftp.disconnect();
channelSftp.exit();

请注意,这不可能是 JAXB 问题,因为它会在其他地方打印完整的 XML,但只有部分内容会上传到远程服务器。可能是什么问题?提前致谢!

始终确保您在完成写入后 flush/close 一个 OutputStream。

try(OutputSteam fileStream = channelSftp.put(limitUploadPathString)) {
  marshaller.marshal(limits, fileStream);
}