- PR -

ObjectをDocumentにキャストしたい

投稿者投稿内容
キシリトール
会議室デビュー日: 2004/04/13
投稿数: 8
投稿日時: 2004-04-28 08:35
こんにちは。
以下の様にFLASHからPOSTで受信したXMLをサーブレット内でXMLとして使いたい為、
Documentにキャストする良い方法はないでしょうか。
よろしくお願いします。

Object reqData = (Object)request.getParameterNames().nextElement();

環境
WinXP
IE6
Tomcat4.1
j2se1.4.1
もんも
常連さん
会議室デビュー日: 2002/10/01
投稿数: 24
投稿日時: 2004-04-28 08:56
もんもです。

こんな感じでは?
Document = (Document)reqData;

もしくはinstanceofで比較してからキャストすればいいと思います。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-04-28 12:19
いくつか勘違いがあるようです。

・HttpServletRequest#getParameterNames()は文字通りパラメータ名のリストを返すもので、
パラメータの値を返すものではない。
・HTTPリクエストのパラメータの値は文字列(Stringオブジェクト)である。
・「キャスト」は、「このインスタンスをこの型で扱う」という宣言でしかなく、文字列で来た
XMLデータをDocumentオブジェクトに変換してくれるような便利な仕組みではない。

ではどうすればいいかというと、

・POSTされたXMLデータを文字列として取り出し、
・その文字列からDocumentオブジェクトを生成する

ことでできます。とりあえずキーワードとしてHttpServletRequest#getParamater、
DocumentBuilderFactory、DocumentBuilderを調べてみてください。
latte
常連さん
会議室デビュー日: 2002/11/07
投稿数: 38
投稿日時: 2004-04-28 12:35
こんにちは。
HttpServletRequestからInputStreamを取り出して
DocumentBuilder bd = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document d = bd.parse(new InputSource(request.getInputStream()));
みたいな感じじゃ出来ないでしょうか?
動作は確認してないので、ダメだったらごめんなさい。


[ メッセージ編集済み 編集者: latte 編集日時 2004-04-28 12:35 ]

[ メッセージ編集済み 編集者: latte 編集日時 2004-04-28 12:37 ]
キシリトール
会議室デビュー日: 2004/04/13
投稿数: 8
投稿日時: 2004-04-28 18:07
もんもさん、ukさん、latteさん、返信ありがとうございます。
一つ一つ理解して解決させたいと思っています。

> ukさん
> HttpServletRequest#getParameterNames()は文字通りパラメータ名の
> リストを返すもので、パラメータの値を返すものではない。
おっしゃる通りです。
例えばフォームのデータを受け取る場合、
String fName = request.getParameter("name");
みたいにしますよね。で、パラメータ名(上では"name")が無いXMLの様な場合は、
どうやって変数に格納すればいいのでしょうか?
初歩的な質問かもしれませんが、よろしくお願いします。

> latteさん
後で試してみたいと思います。
ありがとうございます。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-04-28 19:07
引用:

キシリトールさんの書き込み (2004-04-28 18:07) より:
で、パラメータ名(上では"name")が無いXMLの様な場合は、
どうやって変数に格納すればいいのでしょうか?
初歩的な質問かもしれませんが、よろしくお願いします。


「パラメータ名がない」というのは、どのようにXMLデータを送っているのでしょうか?
HTTPリクエストのコンテンツにそのままXMLデータが入っているのならlatteさんが書かれている
方法でできると思いますが、通常Webブラウザからだとそのようなリクエストにはなりません。
キシリトール
会議室デビュー日: 2004/04/13
投稿数: 8
投稿日時: 2004-04-28 20:26
FLASHから普通に変数を送信した場合、request.getParameter("name");
で問題ありませんでした。つまり、Get送信の場合
http://localhost:8080/WebApp/servlet/dir.MyClass?name=xylitol
の様になってます。で、xmlをGetで送ると
http://localhost:8080/WebApp/servlet/dir.MyClass?<a><b>test</b></a>
こんな感じになってました。

String reqData = (String)request.getParameterNames().nextElement();
上の様に書くとうまくいくので、取りあえずこれでやってみようと思います。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-04-28 20:33
引用:

キシリトールさんの書き込み (2004-04-28 20:26) より:
で、xmlをGetで送ると
http://localhost:8080/WebApp/servlet/dir.MyClass?<a><b>test</b></a>
こんな感じになってました。


うーむ、XMLをGETで送るってのは…話がかみ合わないはずだ
文字数が多かったりすると問題あるのですがそれはわかってますか?

引用:

String reqData = (String)request.getParameterNames().nextElement();
上の様に書くとうまくいくので、取りあえずこれでやってみようと思います。


確かにそれでうまくいくのかも知れませんが、getQueryStringの方がよいでしょう。

[ メッセージ編集済み 編集者: uk 編集日時 2004-04-28 20:34 ]

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