- PR -

LE版ではエラーが出ないのは何故か。

1
投稿者投稿内容
yukiesann
会議室デビュー日: 2004/03/23
投稿数: 2
投稿日時: 2005-03-01 13:31
Tomcat4.1.27の環境を、2つのサーバーに作りました。
ほぼ同じ環境であるにもかかわらず、Aサーバーで動作するjspのコードを
Bサーバーで動作させると、エラーが発生しまいました。

“ほぼ”同じ、という意味は、Tomcatインストール時に
Aサーバーは Tomcat4.1.27-LE-jdk14、
Bサーバーは Tomcat4.1.27 のインストーラで、環境を構築したからです。
(その他、javaはj2sdk1.4.2_07、
 strutsは1.1を使っています。)

jspコードは以下の通りです。(一部抜粋。テーブルの行を作ってます。)
1:<logic:iterate id="list" name="itemForm" property="itemTable" indexId="idx" >
2: <TR>
3: <logic:notEqual name="list" property="<%= "rowspanNow[" + idx + "]" %>" value="0">
4: <TD rowspan="<bean:write name="list" property="rowspanNow" />"></TD>
5: </logic:notEqual>
6: </TR>
7:</logic:iterate>

Bサーバーに置くためには、4行目を以下のように変更しないとエラーになります。
4: <TD rowspan="<bean:write name="list" property="rowspanNow<%= "[" + idx + "]" %>" />"></TD>

発生するエラーは以下の通りです。
org.apache.jasper.JasperException: No getter method for property rowspanNow of bean list

ただ、フォームビーン内には、getRowspan(int) しかないので、
Bサーバー用に変更したコードの方が正しいと思われるのですが、
では、何故Aサーバーで動作したのか、を不思議に思っています。

Tomcatの 4.1.27 と 4.1.27 LE版の違いは
XML(JAXP1.1), JNDI, JDBC2.0 Optional Package, JSSE が
含まれている(4.1.27)のと、含まれていない(4.1.27 LE版)という
違いだけだと、どこかのページで読んだのですが、、、

思い当たることがありましたら、どんなことでもよいのでご教授ください。


[ メッセージ編集済み 編集者: yukiesann 編集日時 2005-03-01 14:17 ]
yukiesann
会議室デビュー日: 2002/12/05
投稿数: 8
投稿日時: 2005-03-02 23:55
勘違いをしていた点がありました。

jspコードでは「logic:iterateタグ」を使っているので、
フォームビーンに必要なメソッドはgetItemTable()であり、
getRowspan(int)メソッドがあろうと 無かろうと関係ない話でした。
getItemTable()メソッドで返しているのはArrayListで、
ArrayListに入れられているデータクラスにはgetRowspan()メソッドと
getRowspan(int)メソッドがありました。
ですので、Aサーバーでエラーが発生しないのは正しくて、
Bサーバーでエラーになるのがおかしいような気がします。
スレッドのタイトルも「LE版で無いほうでエラーになるのは何故か。」に
したくなってきました。

ちなみに、getRowspan()メソッドとgetRowspan(int)メソッドでは
全く同じ値を返していました。

あと、jspのコードをより単純にしてテストしてみました。

1:<logic:iterate id="list" name="itemForm" property="itemTable" indexId="idx" >
2: <TR>
3: <TD><bean:write name="list" property="rowspanNow" /></TD>
4: <TD><bean:write name="list" property="<%= "rowspanNow[" + idx + "]" %>" /></TD>
5: </TR>
6:</logic:iterate>

上記の結果は、やはり、Aサーバでは正しく動作し、
Bサーバーではエラー(前のスレッドと同じもの)が出ました。

又、AサーバーとBサーバーの、jspがservletコードになったファイルを
文字列比較したところ、全く同じでした。
それでもBサーバーでは実行時にエラーになる、ということは、
Tomcat4.1.27と、そのLE版とでは、機能の多寡以外の、
サーブレットエンジン部分でも違いがある、と結論付けてもよいものでしょうか。


[ メッセージ編集済み 編集者: yukiesann 編集日時 2005-03-03 00:13 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-03-03 03:49
まず LE 版とフルバージョンの違いによるものなのか、筐体の違いによるものなのか切り分けてみてはいかがでしょうか。
筐体により発生状況が変わってくるのであればインストールされている JDK のバージョン等を、
やはりLE版とフルバージョンにより発生状況が変わってくるのであればその違いが何であるかを見極めることで解決できるのではないでしょうか。
後者であれば特にXMLパーサの癖が悪さをしているのかもしれません。
yukiesann
会議室デビュー日: 2002/12/05
投稿数: 8
投稿日時: 2005-03-07 00:16
今度はTomcat4.1.31フルバージョンのインストーラで作った
Tomcat環境で、同じコードを実行してみました。
その場合、エラーは出ず、実行できました。
ということは、やはり、4.1.27LE版で作成したTomcatの環境は正しく、
4.1.27フルバージョンの方で作成した環境は正しくないようです。

XMLパーサが関係しているのか、以下の手順で検証してみました。
結果から言うと、XMLパーサは関係ないようです。

4.1.31のTomcatHome\common\endorsed 内のファイル
(xercesImpl.jar と xmlParserAPIs.jar)を削除し、
jsp用ワークファイルを空にし、
Tomcatを起動して、対象コードを実行。
エラーも出ず、実行できました。
1

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