- - PR -
Servlet上でDOMドキュメントをOutする際のエラーについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-03-11 03:04
まじめまして。
WindowsXP / Tomcat 6.0.18 / JDK 1.6.0.11にてWebアプリケーションを開発しています。 現在、AMLine(グラフを描画するFlash式のAjaxコンポーネント:JavaScriptから利用する)を用いて、DB上のデータを計算し表示する機能の作成を行っております。 ※AMLineは設定ファイル(XML)のパスとデータファイル(XML)のパスをセットすることでグラフの描画を行います。 また、以下のような構成で機能を実現しています。 ブラウザ←JSP(JavaScript/AMLine)←[AMLine用データファイル(XML:サーブレットリクエストで取得)]←Servlet←DB Eclipse上でXML生成のテストを行った際はXMLが正常に構築されたのですが(FileOutputStreamを使用)全く同じロジックでServletを用いた際に、全く同じデータを使用しているにもかかわらずXMLにて「NaN」となる箇所があります。 そこで質問なのですが、HttpServletResponseに保持されているOutputStreamオブジェクトは、double値を書き込む際の桁数制限等はあるのでしょうか? ご存知の方がいらっしゃいましたら、教えていただけるとありがたいです。 よろしくお願いいたします。 -------------------------------------------------------------------------------- 尚、以下がサーブレット内の処理の概要です。 1)DBから値を取得 2)1で取得した値を計算 3)2で計算した値を元にDOMドキュメント構築 4)response.getOutputStream()により、出力ストリームを取得 5)javax.xml.transform.Transformer#transform(DOMSource, OutputStream)により 出力ストリームにXML書き込み -------------------------------------------------------------------------------- | ||||||||
|
投稿日時: 2009-03-11 09:05
OutputStreamはバイト指向のストリームなので無関係です。 double値のような概念はなく単なるバイト列を扱います。 他の原因を疑いましょう。 | ||||||||
|
投稿日時: 2009-03-11 10:02
>OutputStreamはバイト指向のストリームなので無関係です。
確かに、仰る通りですね(^^); しかも、よくよく考えてみれば、書き込むdouble値はtoString()メソッドでStringに変換した後DOMツリーに書き込んでいたので、やはり計算ロジックに問題があるとしか思えませんでした。 依然謎なのは、同一ロジックでDOMを構築しているのに、結果がそれぞれ異なるという点です。 「サーブレット/Eclipse上でのDOM書き込みテストクラス」のロジックの違いは、OutputStreamオブジェクトだけで、DOM構築ロジックは共通の物を使っている(つまりは、 Document UserClass#getXML()のようなメソッドをコールしている)ので、今一原因がつかめません。(DBを引くためのパラメータも合わせてあります) ※勿論、Tomcatで使用しているjarとEclipseで使用しているjarのタイムスタンプも確認しました。 もう少し探ってみます。 有難うございました。 | ||||||||
|
投稿日時: 2009-03-11 11:33
本当に同じデータかどうかを確認するのが早そうですね。 「同じはず」と思ってしまうことは多々有ります。 後は処理ロジックを含むJarが違う場合です。
これを表示してみて、本当に同じクラスが示されているでしょうか。 | ||||||||
|
投稿日時: 2009-03-11 12:16
>本当に同じデータかどうかを確認するのが早そうですね。
最初にサーブレットの試験をした時のURLパラメータをそのままコピーしてEclipse上でもテストしたので、利用するデータソースは同じです。 (因みに、デバックプリントを取って確認済みです) また、jar違いに関しては、現在自作のjar | ||||||||
|
投稿日時: 2009-03-11 12:30
Factoryを使っているなら、Transformerが違うという可能性も。
| ||||||||
|
投稿日時: 2009-03-11 12:43
>Factoryを使っているなら、Transformerが違うという可能性も。
Transformerの違いで、DOMのテキストノードのデータが変わる事はあるのでしょうか? 前回、書き込みのコミットミスをしてしまったので、前回の続き… 自作jarは一つなので、処理ロジックでjarを取り違えることは無いと思われます。 ただ、処理ロジックがテンプレートメソッドパターンになっており、引数で指定されたインタフェースによって処理が変わるので、ポリモルフィズムが悪さをしている可能性は否めません…(コード上は、全く同じインタフェースの実装を渡していますが) | ||||||||
|
投稿日時: 2009-03-11 15:49
色々と調査をした所、サーブレットクラス内でのrequest.getParameterの引数が間違っておりました。(しょうもない間違いですみません)
ソースを修正した所、現在は正常に動作しております。 お騒がせ致しました。 |
1