java - 使用关于持久性和 XML 的 InputStream 的最佳方式

标签 java xml web-services inputstream

我有一个 REST 网络服务,它监听 POST 请求并从客户端获取 XML 负载并将其最初存储为 InputStream,即 在 Representation 对象上您可以调用 getStream()

我想利用 InputStream 中保存的 XML,我开始认为保留它是明智的,这样我就可以多次查询数据——一旦你读完它,对象就变成空的。所以我考虑将 InputStream 转换为字符串。这不是一个好主意,因为 javax.xml.parsers 库中的 DocumentBuilder.parse() 只允许您通过:

  • 输入流
  • 文件
  • 网址
  • SAX 输入源

不是字符串。

关于从中解析 XML,我真的应该用 InputStreams 做什么? 请记住,我将希望在未来的流程中通过代码重新查询该 XML。

最佳答案

如果您有一个 InputStream,并且想将它用作 XML 文档,那么为什么不简单地解析它并传递 Document 对象呢?如果您想保留此对象,请使用序列化程序将其写回文本。

正如我在对 Tom Hawtin 的评论中指出的那样,在处理 XML 时编码非常重要。与其在这里写一篇可能会遗漏您的具体情况的长篇文章,不如在这里写一篇article。我写的。

编辑:实际上,由于我的文章没有专门讨论 Web 服务,所以我应该在这里深入探讨一下。可以在两个地方指定内容编码:在 XML 序言中,或在 Content-Type 响应 header 中。根据 XML 规范,前者是您要使用的,也是解析器将使用的。在大多数情况下,这无关紧要:由不知道规范的人设置的 Web 服务通常会使用没有字符集规范的文本/xml(这是不正确的,但可能不会造成伤害)。如果他们做事正确,他们将使用 utf-8 编码指定 application/xml。但是,您应该验证您得到的是什么,这样您就不会得到一些解析器无法处理的奇怪编码。

关于java - 使用关于持久性和 XML 的 InputStream 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/638326/

相关文章:

java - 自定义多线程 : limiting number of tasks of some type to be executed in parallel, 不限制其他类型任务

java - 使用 Java 通过代理进行 FTP 连接

Java.net.SocketException : Connection reset when reading file from S3

javascript - 如何在 Mozilla 中将 E4X XML 原语写入新的文本/xml 窗口?

android - 颜色 xml : "Attribute is missing the Android namespace prefix"

iphone - 如何使用 Cocoa (iPhone) 解码 XML 文档中的 shift-jis 编码数据

java - 如果appendAllowed 设置为true,writeHeader() 仍在运行吗?

python - 从纯文本文件导入字典

java - 在测试自动化中设置保存点并回滚到它时应遵循的最佳实践

java - 将文件上传到网络服务(java)