- PR -

javax.xml.parsers.SAXParserのparseメソッドが止まっている

1
投稿者投稿内容
会議室デビュー日: 2004/04/26
投稿数: 9
投稿日時: 2006-07-15 22:56
javax.xml.parsers.SAXParserのparseメソッドでXMLを解析する場合、処理が止まるとの現象が発生します。
たとえばendElement()メソッドが終ったら、次のstartElement()メソッドに行かなく、そのまま止まるとの現象です。
発生はランダムで、特に一定なルールがありません。parseメソッドの中にStringBufferで割りに大きな文字列を作っていて、Eclipseで実行し、機器のメモリがぎりぎりまでになっています。
これで非常に悩んでいます。何かヒントが戴ければ大変あり難いです。ぜひともよろしくお願いいたします。
kuma
大ベテラン
会議室デビュー日: 2004/02/25
投稿数: 110
投稿日時: 2006-07-15 23:56
引用:

岩さんの書き込み (2006-07-15 22:56) より:

たとえばendElement()メソッドが終ったら、次のstartElement()メソッドに行かなく、そのまま止まるとの現象です。



まず、それぞれのメソッドの呼び出しトリガが何であるのか理解しましょう。

引用:

発生はランダムで、特に一定なルールがありません。parseメソッドの中にStringBufferで割りに大きな文字列を作っていて、Eclipseで実行し、機器のメモリがぎりぎりまでになっています。



「一定なルール」がないことはまずありえません。
(今回は気が進まないからエラー終了してやれなどといった基準がクラス内に存在すれば別ですが)
思い込みを無くすために1週間程手をつけず改めて分析してみることを勧めます。
会議室デビュー日: 2004/04/26
投稿数: 9
投稿日時: 2006-07-19 21:41
ご返事ありがとうございました。自己レスです。
以下の2点を直しました。
1、自分で作成したログをlog4jに変える。
2、SAXParser.parse(String uri, DefaultHandler dh) の使用をやめて、URLConnectionを使ってHTTPの返信を取得する。parse(InputStream is, DefaultHandler dh) を呼び出し後、InputStreamを明示的にクローズする。

今の段階でうまくいたみたいです。
InputStreamのクローズが一番大事な処ではないかと思っていますが、後日またSAXParser.parse(String uri, DefaultHandler dh) に戻し、実行した外思っているとところです。
1

スキルアップ/キャリアアップ(JOB@IT)