繁体   English   中英

从OMElement对象获取InputStream / io.Reader

[英]Get an InputStream/io.Reader from OMElement object

我有一个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:base64解码期间出错

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

Axiom目前没有流式拉线序器(我不知道任何其他支持这种情况的XML库)。 它仅支持在推送模式下序列化为XML,即通过写入OutputStream或Writer。 您可以在单独的线程中进行序列化,并使用PipedOutputStream / PipedInputStream(类似于Activation为DataHource支持的DataHandler的DataHandler#getInputStream()所做的操作)。 这将满足恒定的内存要求,但我想在您的情况下使用单独的线程导致的开销是不可接受的。

我想过在过去实现这种拉序列化器的可能性,我认为这样做(不使用单独的线程)在技术上是可行的。 请打开Axiom功能请求,以便我们可以在下一个版本中实现它。 我认为这对Axiom来说是一个有趣的补充。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM