1

C# クライアントから GAEJ アプリに潜在的に大きな xml チャンクを POST し、それを DOM ドキュメントに解析しようとしています。

リクエストデータを文字列に解析してからトリミングすることで、ドキュメントビルダーにxmlを解析させることができました。

        String xml;
        BufferedReader rdr = req.getReader();
        String line;
        StringBuilder result = new StringBuilder();
        while ((line = rdr.readLine()) != null) {
            result.append(line);
        }
        xml = result.toString();
        db = dbf.newDocumentBuilder();
        Document doc = db.parse(new InputSource(new StringReader(xml.trim())));

ただし、GAEJ アプリは可能な限り効率的である必要があり、ソースストリームをパーサーに供給するのではなく、潜在的に大きな xml 入力を文字列に 1 行ずつ読み取るのは非常に悪いようです。以下が機能することを望みます。

        Document doc = db.parse(request.getInputStream());

しかし、その後、常に「org.xml.sax.SAXParseException: Content is not allowed in Trailing section」が発生します。request.getInputStream() 呼び出しの内容をコンソールにダンプすると、最後の終了タグの後にいくつかのボックス文字が表示されますが、それらがどのようにそこに到達したかはわかりません (クライアント側は UTF-8 エンコーディングを使用しています)。または入力ストリームからそれらを削除する方法。ありがとう!

4

1 に答える 1