5

私はオブジェクトを持っており、そこからまたはリーダーオブジェクトOMElementを取得したいと考えています。InputStream私が欲しいのは、メモリに読み込まれることなく、私が持っているxmlからをストリーミングすることです。私はそこからオブジェクトOMElementを取得することしかできませんでした。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 デコード中のエラーが生成されます

4

1 に答える 1

2

getDataHandlerFromElement メソッドの目的は、要素に含まれる base64 でエンコードされたバイナリ データをデコードすることですが、これは目的ではありません。

Axiom には現在、ストリーミング プル シリアライザーがありません (これをサポートする他の XML ライブラリは知りません)。プッシュ モードでの XML へのシリアル化のみをサポートします。つまり、OutputStream または Writer への書き込みによるものです。別のスレッドでシリアル化を実行し、PipedOutputStream/PipedInputStream を使用できます (DataSource によってサポートされていない DataHandler の DataHandler#getInputStream() に対してアクティベーションが行うことと同様)。これは一定のメモリ要件を満たすでしょうが、別のスレッドを使用することによって引き起こされるオーバーヘッドはあなたの場合には受け入れられないと思います.

過去にそのようなプルシリアライザーを実装する可能性について考えましたが、それを行うことは技術的に実現可能だと思います (別のスレッドを使用する必要はありません)。次のリリースのいずれかで実装できるように、Axiomの機能リクエストを開いてください。Axiom への興味深い追加になると思います。

于 2011-11-24T10:22:45.440 に答える