我有一个 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/