- PR -

ソケットからのXML文書のパース

投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2004-08-16 23:29
うーん、SAXでも止まるとなりますと一部先の回答者からのご意見にもありますが
○入力ストリーム ist にデータが入っていない。
○(かなり考えにくいですが)XMLデータの記述ミス。
あたりのような気がします。
一度ストリーム入力までで実行を打ち切って ist の内容をString化して確認してみては
いかがでしょうか?
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-08-16 23:30
引用:

SAXに変更してみました。しかし、それでも

parser.parse(ist, handler);

の部分で処理がとまっております。istが EOFにならなくても
処理を抜けられるようにするにはどのようにすれば
よろしいでしょうか?



まず、以前にも書きましたが、parse()の後の readLine()は
不要と思われますが?(XML文書の後にまだ何か続くので
しょうか? parse()が終わった後は、入力ではなく、処理結果
の出力等を行うのだと思われます。 以降はそう仮定して続け
ます。)

parse()から戻ってきたところでデータ処理するのではなく、
ドキュメントの終了タグ(この例では /address)のイベントを
受け取った endElement()内で処理すれば良いのだと思います。

それらの処理結果を受け取ったクライアントが close()すれば
サーバの parse()も終了します。
この後サーバは、ソケットに対しては close()するしかありま
せんが、SAX内で生成した何らかのオブジェクトはアクセスする
ことができます。(追加修正)

[ メッセージ編集済み 編集者: Kissinger 編集日時 2004-08-16 23:34 ]
ちょま吉
大ベテラン
会議室デビュー日: 2004/08/04
投稿数: 112
投稿日時: 2004-08-16 23:59
いっそのこと、クライアントからXMLを送信する前にXMLデータの長さを送信して、サーバ側でそれを取得し、その長さ分のXMLデータをStringBufferにいれてあげて後はいっしょ、、、これでは駄目でしょうか?

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