在编组到 xml 到文件之前计算 JAXB 输出流的校验和
Calculating the checksum of the JAXB output stream before marshalling to xml to file
我们的生产环境遇到了奇怪的问题。我们必须生成数千个 xml 个文件,每个文件的大小约为 100MB。
我们使用带有 XSD 验证的 JAXB 来生成 xml 文件。但有时(到目前为止在 6 个月内发生了 2 次)生成的 XML 文件是 jumbled/corrupted.
但是我们在服务器日志中没有找到任何 errors/exceptions。
所以我们怀疑问题不是在生成 XML 文件时,而是在写入文件系统时,因为我们使用 NFS(网络文件系统)来存储我们所有的文件。
由于我们无法找到根本原因,我们正在考虑添加额外的验证步骤,例如在文件写入前后检查内容校验和。
现在的问题是,
有没有办法在写入文件之前获取 XML 的校验和。比如计算输出流的校验和?
是否有任何其他方法可以验证写入文件的数据的完整性?
有个CheckedOutputStream that you perhaps can use as OutputStream
when marshalling the content? Then you could use CheckedInputStream把数据再读回来看看有没有变。
我已经找到了解决办法。
有一个名为 "DigestOutputStream" 的 class 可用于此目的,它在 JDK 中可用。
我们的生产环境遇到了奇怪的问题。我们必须生成数千个 xml 个文件,每个文件的大小约为 100MB。
我们使用带有 XSD 验证的 JAXB 来生成 xml 文件。但有时(到目前为止在 6 个月内发生了 2 次)生成的 XML 文件是 jumbled/corrupted.
但是我们在服务器日志中没有找到任何 errors/exceptions。 所以我们怀疑问题不是在生成 XML 文件时,而是在写入文件系统时,因为我们使用 NFS(网络文件系统)来存储我们所有的文件。
由于我们无法找到根本原因,我们正在考虑添加额外的验证步骤,例如在文件写入前后检查内容校验和。
现在的问题是,
有没有办法在写入文件之前获取 XML 的校验和。比如计算输出流的校验和?
是否有任何其他方法可以验证写入文件的数据的完整性?
有个CheckedOutputStream that you perhaps can use as OutputStream
when marshalling the content? Then you could use CheckedInputStream把数据再读回来看看有没有变。
我已经找到了解决办法。 有一个名为 "DigestOutputStream" 的 class 可用于此目的,它在 JDK 中可用。