- - PR -
axisでリモートのオブジェクトのメンバ関数を呼ぶとエラー
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-11-30 21:41
解らないなりに@ITの記事を読んでaxisを勉強している最中です。
記事のサンプルプログラムは正しく動くのですが、そのプログラムとほとんど同じようなサーバー、クライアント共簡素なプログラムをWSDLを使い作った物を動かすとオブジェクトの作成までは例外が出ずメンバ関数を呼ぶところになるとエラーになります。何が原因なのかさっぱりです。 どなたか教えていただける方は居ないでしょうか。 サーバー RedHat9.0 java-1.4.1 axis-1.1 クライアント win2000pro java-1.4.1 axis-1.1 エラー java.lang.IllegalAccessException: Class org.apache.axis.providers.java.JavaProvider can not access a member of class turip.FishDbBean with modifiers "" | ||||
|
投稿日時: 2003-12-01 12:36
例外のメッセージだけ見ると、どうやらpublicでないメンバにアクセスしているために
発生した例外のように見受けられます。 もしよろしければ、FishDbBeanのソースと、 もしTomcatを使っておられるのならwebapps/axis/WEB-INF/server-config.wsddの FishDbBeanの設定部分(おそらく、service name="FishDbBean"とか書いてある部分)を 提示していただけませんでしょうか? そうすれば、より詳しいことがわかるかもしれません。 ただし、保証はできませんが。 | ||||
|
投稿日時: 2003-12-01 18:27
レス、ありがとうございます。
遅くなってすみませんが、よろしくお願いします。 FishDbBean.java ************************************** package turip; public class FishDbBean implements java.io.Serializable { private int colMaxInt; FishDbBean() { colMaxInt = 0; } public int getColMaxInt() { return colMaxInt; } } server-config.wsdd ************************************ <service name="FishDbService" provider="java:RPC"> <parameter name="allowedMethods" value="*"/> <parameter name="scope" value="session"/> <parameter name="className" value="turip.FishDbBean"/> </service> と、なっています。 記事のサンプルと同じ様にしているのになぜこれが動かないのか分かりません。 | ||||
|
投稿日時: 2003-12-01 18:30
コンストラクタがpublicになっていないからではないでしょうか?
| ||||
|
投稿日時: 2003-12-01 20:09
うぅぅーーー [涙]ポロリ
ありがとうごさいました。 出来ました。 まさかコンストラクタまでpublicにしないといけないんなんて デフォルトでprivateということになっていたのですね とても恥ずかしいです。ぜんぜん気が付きませんでした。 実は3日ぐらい悩んでいました。 Emacs信者さん、ありがとうございました。 | ||||
|
投稿日時: 2003-12-03 14:30
デフォルトはpackage private(同一パッケージ内はアクセス可能)です。 | ||||
|
投稿日時: 2003-12-03 19:10
ukさん、ありがとうございます。
Javaの情報隠蔽ということでしょうか。 それにしても厳しいですね Javaのパッケージはちょっと解りずらいです。 | ||||
|
投稿日時: 2003-12-03 20:23
package privateはJava独特の機構なので、わかりずらいと思います。通常は明示的に 指定したほうがいいでしょう。私はpackage privateなフィールドやメソッドを定義した ことはないです。 それと、アクセス制御の点を除けばパッケージは単なる名前空間と考えていいと思います。 #要するにクラス名がかぶらないように修飾するためのもの、と | ||||
