我有一个OMElement
对象,从中我想得到一个InputStream
或读者对象。我想要的是流式传输xml
来自OMElement
我有,没有加载到内存中。我只能得到XMLStreamReader
对此表示反对。但我找不到办法得到InputStream/Reader
出于那个。
OMElement element /*I have this object */
XMLStreamReader xmlreader = element.getXMLStreamReaderWithoutCaching();
谁能帮帮我吗 ?我真的很感激!
Thanks
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 对不受 DataSource 支持的 DataHandler 的 DataHandler#getInputStream() 所做的操作)。这将满足恒定的内存需求,但我猜想在您的情况下使用单独的线程造成的开销是不可接受的。
我过去考虑过实现这样一个拉序列化器的可能性,并且我认为这样做在技术上是可行的(不使用单独的线程)。请打开一个Axiom 的功能请求 https://issues.apache.org/jira/browse/AXIOM这样我们就可以在下一版本中实现这一点。我认为这将是 Axiom 的一个有趣的补充。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)