- PR -

tomcat5でmysqlにアクセスするときの不可解問題

1
投稿者投稿内容
自由職
会議室デビュー日: 2004/02/04
投稿数: 10
投稿日時: 2004-04-03 16:16
解らないなりに@ITの記事を読んでaxisを勉強している最中です。
記事のサンプルプログラムは正しく動くのですが、そのプログラムとほとんど同じようなサーバー、クライアント共簡素なプログラムをWSDLを使い作った物を動かすとオブジェクトの作成までは例外が出ずメンバ関数を呼ぶところになるとエラーになります。何が原因なのかさっぱりです。
どなたか教えていただける方は居ないでしょうか。
サーバー     win2000pro 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 PriceServer with modifiers ""
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2004-04-04 23:08
IllegalAccessExceptionが投げられているということは、呼び出すメンバ関数にアクセスできないからでしょう。(おそらくpakage privateのアクセス制限になっているのでしょう)
呼び出すメソッドに対して、publicのアクセス制限を与えれば動きそうな気がします。
自由職
会議室デビュー日: 2004/02/04
投稿数: 10
投稿日時: 2004-04-04 23:20
かずくんさん:
 ご教授、ありがとうございます。
 呼び出すメソッドのアクセス制限はたしかpublicと設定しています。今、一人の方から、
"JAVAのアクセス指定をきちんとしなかったためだと思います。
C++と違いJAVAはクラス自体にアクセス指定がありデフォルト(何も書かないと)で
アクセス不可(これが意外と気が付きません)となります。
JAVAのクラス自体のアクセス指定、JAVAのメンバ(C++でいう所のデータメンバ、メンバ関数)
のアクセス指定をよーくチェックして見てください"というアドバイスを頂きましたが、ただJAVAのクラス自体のアクセス指定、JAVAのメンバのアクセス指定の方法がわかりませんので、また返事を待っているところが、まし、これについて、ご教授いただければ、と思います。
 よろしくおねがいします。
kan
ベテラン
会議室デビュー日: 2002/11/28
投稿数: 55
投稿日時: 2004-04-05 01:00
メソッドだけでなく、クラスをpublicにしてみて下さい。ということだと思います。

動かないコードの例を書いていただければ、もう少し回答できると思いますよ。
自由職
会議室デビュー日: 2004/02/04
投稿数: 10
投稿日時: 2004-04-05 13:16
kanさん:
 ご教授、ありがとうございます。動かないコードは、以下の通りです.
このPriceServer.classをaxisでdeployして、MySQLデータベースのliquorデータベースにアクセスして、list_table テーブルからprice fieldの値を取り出すというふうに動作させたいんですが。

public class PriceServer implements java.io.Serializable{
private int price;
PriceServer(){ price = -1; }

public int getPrice(String JANcode){
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();// or Class.forName("org.gjt.mm.mysql.Driver");
String url = "jdbc:mysql://localhost:3306/liquor?user=root&password=root&useUnicode=true&characterEncoding=SJIS";
Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
String sql = "select name,price from list_table where JAN_code=" + JANcode;
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
price = rs.getInt("price");
System.out.println(price);
}
stmt.close();
con.close();
} catch (Exception e) { e.printStackTrace();}

return price;
}
}


[ メッセージ編集済み 編集者: 自由職 編集日時 2004-04-05 13:22 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-04-05 20:16
引用:

自由職さんの書き込み (2004-04-05 13:16) より:
PriceServer(){ price = -1; }


このコンストラクタをpublicにしてみてください。
自由職
会議室デビュー日: 2004/02/04
投稿数: 10
投稿日時: 2004-04-07 10:44
 皆さんのご教授、ありがとうございました。
 おかげさまで、うまくいきました。

[編集すみ。自由職]

[ メッセージ編集済み 編集者: 自由職 編集日時 2004-04-13 22:37 ]
1

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