2011-11-22 8 views
5

私はOMElementオブジェクトを持っており、そのオブジェクトからInputStreamまたはreaderオブジェクトを取得したいと考えています。私が望むのは、メモリにロードされることなく、私が持っているOMElementからxmlをストリーミングすることです。私はそれからXMLStreamReaderオブジェクトを得ることができました。しかし、私はInputStream/Readerを得る方法を見つけることができません。OMElementオブジェクトからInputStream/io.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のデコード中にエラーを

+0

この問題はどのように克服しましたか?サンプルコード? – Ratha

答えて

2

getDataHandlerFromElement方法の目的は、要素に含まれるbase64で符号化されたバイナリデータを復号することで、それはあなたが望むものではありません。

現在、Axiomにはストリーミングプルシリアライザがありません(これをサポートする他のXMLライブラリはありません)。これは、プッシュモードで、すなわちOutputStreamまたはWriterに書き込むことによって、XMLへのシリアライズのみをサポートします。別のスレッドでシリアル化を行い、PipedOutputStream/PipedInputStreamを使用することができます(DataSourceによってサポートされていないDataHandlerのDataHandler#getInputStream()と同じように)。これは、一定のメモリ要件を満たすだろうが、私は別のスレッドを使用することによって引き起こされるオーバーヘッドはあなたのケースでは受け入れられないと思う。

私は過去にこのようなプルシリアライザを実装する可能性について考えていましたが、(別のスレッドを使用せずに)それを行うことは技術的に実現可能だと思います。 feature request for Axiomを開き、次のリリースの1つで実装できるようにしてください。私はそれがAxiomにとって興味深いものになると思う。

関連する問題