- PR -

axisでリモートのオブジェクトのメンバ関数を呼ぶとエラー

投稿者投稿内容
こまったちゃん
会議室デビュー日: 2003/11/30
投稿数: 9
投稿日時: 2003-12-03 21:29
> 私はpackage privateなフィールドやメソッドを定義したことはないです。
やはりそうですか、本来無用なアクセスを避ける為の情報隠蔽ということなのでしょうが、実際問題トラブルの元になっていると思います。特にクラスが多くなってかっこよくパッケージ単位にまとめようとしたりしたら問題がでそぅ。
今回のことを振り返ってみればコンストラクタの所で例外が出なかったのが気になります。
自分が定義したコンストラクタがprivateな為デフォルトのコンストラクタ(確かあったような?)がデフォルトオブジェクトを生成したのでしょうか。実際nullかどうかチェックしてもひっかかりませんでした。だとしたらこれは大変厄介なことと・・・。
実際メンバ関数を呼んだときに例外が投げられています。
axisが間に入る為にますます解りにくくなります。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-12-03 21:42
引用:

こまったちゃんさんの書き込み (2003-12-03 21:29) より:
> 私はpackage privateなフィールドやメソッドを定義したことはないです。
やはりそうですか、本来無用なアクセスを避ける為の情報隠蔽ということなのでしょうが、実際問題トラブルの元になっていると思います。特にクラスが多くなってかっこよくパッケージ単位にまとめようとしたりしたら問題がでそぅ。



パッケージ単位にまとめるのは問題ありません。また、トラブルの元になっているというのは
なぜそう思うのですか? package privateを使うのはC++のfriendと同様限定されたケース
だと認識しているのですが。

引用:

今回のことを振り返ってみればコンストラクタの所で例外が出なかったのが気になります。
自分が定義したコンストラクタがprivateな為デフォルトのコンストラクタ(確かあったような?)がデフォルトオブジェクトを生成したのでしょうか。実際nullかどうかチェックしてもひっかかりませんでした。だとしたらこれは大変厄介なことと・・・。



ではなくて、Axisのクラスからリフレクションを使って該当のクラスを生成しようとして
エラーになっているのでしょう。デフォルトコンストラクタは、コンストラクタを何も定義
しなかった場合にpublicで引数を取らないコンストラクタが生成されるものなので、今回の
ように明示的に定義した場合は生成されません。

引用:

実際メンバ関数を呼んだときに例外が投げられています。
axisが間に入る為にますます解りにくくなります。



メンバ関数ってなんのですか? そもそもWebサービスの実装クラスを直接呼べないでしょう?

[ メッセージ編集済み 編集者: uk 編集日時 2003-12-04 11:47 ]
こまったちゃん
会議室デビュー日: 2003/11/30
投稿数: 9
投稿日時: 2003-12-04 00:11
大変参考になります。
もっと勉強が必要だと感じています。
>該当のクラスを生成しようとして エラーになっているのでしょう
このエラーになったときに例外は投げられないものなのでしょうか
実際例外が投げられてくるのは生成されていたと思われていた
オブジェクトの(JavaBeans)のメンバ関数(アクセッサ)を呼び出した
時でした。
Keisuke
大ベテラン
会議室デビュー日: 2003/10/24
投稿数: 105
投稿日時: 2003-12-04 01:04
そもそも SOAP はリモートオブジェクトなの?
インスタンス参照を持てるような仕様ではないはず。
ただの RPC なのでは?

> まさかコンストラクタまでpublicにしないといけないんなんて
AXISのサンプルでは、public なっていなかったのでしょうか?
クラスの宣言は public にしたのですよね?だったらなぜコンストラクタを
public にしなかったのでしょうか? public クラスでコンストラクタを
public にしないということは、「クラスは公開するが、勝手にインスタンスを
作成されては困る」ということを意味します。



[ メッセージ編集済み 編集者: Keisuke 編集日時 2003-12-04 07:14 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-12-04 12:44
引用:

こまったちゃんさんの書き込み (2003-12-04 00:11) より:
>該当のクラスを生成しようとして エラーになっているのでしょう
このエラーになったときに例外は投げられないものなのでしょうか
実際例外が投げられてくるのは生成されていたと思われていた
オブジェクトの(JavaBeans)のメンバ関数(アクセッサ)を呼び出した
時でした。



Webサービスの仕組みをまず理解されたほうがいいと思います。該当の記事をざっと
見ましたが、「生成されていたと思われていたオブジェクト」というのはおそらく
クライアントのプロキシクラスのインスタンスでしょう。エラーが出ているのはWebサービス
の実装クラスのインスタンスを生成するところです。実際にWebサービスへの呼び出しが
あって初めて実装クラスのインスタンスが生成されるので、プロキシのメソッド呼び出しで
エラーになるのは当然ですね。
こまったちゃん
会議室デビュー日: 2003/11/30
投稿数: 9
投稿日時: 2003-12-04 20:28
>「クラスは公開するが、勝手にインスタンスを 作成されては困る」ということを意味します。
はい、まったくそのとうりです。うっかりしていました。

>Webサービスの仕組みをまず理解されたほうがいいと
すみません、まだ仕組みがよく解っていません。

>実際にWebサービスへの呼び出しがあって初めて実装クラスのインスタンスが生成されるで、プロキシのメソッド呼び出しで エラーになるのは当然ですね。
そうだったんですか、それで今回のことが理解できたように思います。わざわざ該当記事まで見ていただいてありがとうございました。

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