java - 从 OMElement 对象获取 InputStream/io.Reader

标签 java xml axiom xmlstreamreader

我有一个 OMElement 对象,我想从中获取一个 InputStream 或 reader 对象。我想要的是从我拥有的 OMElement 流式传输 xml,而不加载到内存中。我只能从中获取 XMLStreamReader 对象。但是我找不到从中获取 InputStream/Reader 的方法。

OMElement element /*I have this object */
XMLStreamReader xmlreader = element.getXMLStreamReaderWithoutCaching();

谁能帮帮我?非常感谢!

谢谢

PS:我找到了一种获取 InputStream 的方法,但它给出了一个异常,我需要帮助来解决它。

XMLStreamReader xmlReader = element.getXMLStreamReader(false);

  try {
      if (xmlReader.getEventType() == XMLStreamReader.START_DOCUMENT) {
                xmlReader.next();
       }
      DataHandler handler = XMLStreamReaderUtils.getDataHandlerFromElement(xmlReader);
      handler.getInputStream();

调用 getDataHandlerFromElement 产生异常 javax.xml.stream.XMLStreamException: Error during base64 decoding

最佳答案

getDataHandlerFromElement 方法的目的是解码元素中包含的 base64 编码二进制数据,这不是您想要的。

Axiom 目前没有流式拉取序列化程序(而且我不知道任何其他支持此功能的 XML 库)。它仅支持在推送模式下序列化为 XML,即通过写入 OutputStream 或 Writer。您可以在单独的线程中进行序列化并使用 PipedOutputStream/PipedInputStream(类似于 Activation 为 DataHandler#getInputStream() 为不受 DataSource 支持的 DataHandler 所做的)。这将满足常量内存要求,但我想在您的情况下,使用单独线程造成的开销是 Not Acceptable 。

我过去考虑过实现这样一个拉式序列化器的可能性,我认为这样做在技术上是可行的(无需使用单独的线程)。请开个feature request for Axiom这样我们就可以在下一个版本中实现它。我认为这将是对 Axiom 的有趣补充。

关于java - 从 OMElement 对象获取 InputStream/io.Reader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8221892/

相关文章:

list - 通用列表的长度函数

algorithm - 公理解析

java - key 管理器/信任管理器的 SSL 上下文数组

java - Spring Integration Java DSL -- 聚合器的配置

java - 如何在一组数组中找到元素最多的数组

android - 在 Android Studio 中如何从 XML 文件中查找 @values

java - 如何在Z3 Java API中编写公理?

java - Epson SDK 版本 2 收银抽屉适用于 Android?

xml - 如何使用 asp 设置 http 超时?

c# - 将两个 xml 文件合并为一个文件的最快方法是什么