To: Tiffanyさん

 木村です。

 『なぜgetterをつけなければならないのか』と問われると「そう
いう物なんです」となり、答えに困ってしまうのですが...。^^;
可能な限りご説明したいと思います。

 TiffanyさんのWebサービスは、サーバ側で作成したSample01Repと
いうクラス(Bean)をAxisが提供するBeanSerializerの機能を用いて
クライアント側に転送しています。Beanは、内部に持つプロパティ
に対するsetterメソッドとgetterメソッドを持つ必要があり、今回
の場合は、setName()とgetName()がそれにあたります。下記の報告
では、便宜上getName()メソッドのみを追加しましたが、プロパティ
nameが固定値ではない場合、setName()メソッドも必要となります。

 最初に送られてきたSample01Rep.javaにはsetterもgetterも存在
しないため、BeanSerializer/BeanDeserializerの期待するクラス
ではなくご報告頂いたような不具合が生じてしまったと思われます。
しかし、正常に実装されたBeanを利用する場合には発生しない現象
ですので、今回のケースは「バグ」というよりは利用方法の誤りと
見るべきと考えました。

 以上の説明で、ご納得頂けたでしょうか?

よろしくお願いします。
---
Toshi <[EMAIL PROTECTED]>

On Fri, 13 May 2005 [EMAIL PROTECTED] wrote:

木村さん

 素早いご返信ありがとうございます。

 教えていただいたとおり、getterメソッドを付けて実行したら
 予想通りの結果を得ることができました。
 ありがとうございます。

 しかし、なぜgetterをつけなければならないのか
 教えていただけませんでしょうか?

---
Tiffany

-----Original Message-----
From: Toshiyuki Kimura [mailto:[EMAIL PROTECTED]
Sent: Friday, May 13, 2005 5:45 PM
To: axis-user-ja@ws.apache.org
Subject: Re: problem on handling array

To: Tiffanyさん

 木村です。

 関連しそうとご報告のあったAXIS-1569とは無関係の様です。

 本件は、Bean実装であるSample01Rep.javaのソースに問題がある
ようです。次の様に修正して実行してしてみて下さい。変更内容は
getterメソッドgetName()を追加したのみです。
 このファイルをコンパイル後にAPサーバにコピーし、サーバを
再起動すれば、正常に配列データが取得できるようになるはずです。
もし、不具合が解決しないようであれば、また連絡ください。

.........*.........*.........*.........*.........*.........*.........*
package mysamples;

import java.io.Serializable;

public class Sample01Rep implements Serializable{
  public String[] name = {"name1", "name2", "name3", "name4" , "name5"};

  public Sample01Rep(){
  }

  public String [] getName() {
      return name;
  }
}
.........*.........*.........*.........*.........*.........*.........*

よろしくお願いします。
---
Toshi <[EMAIL PROTECTED]>

On Fri, 13 May 2005 [EMAIL PROTECTED] wrote:

皆さん

こんにちは。はじめまして、Tiffanyです。

AxisRC3から使い始めて、今週Axis1.2Finalにバージョンアップしました。

英語版のバグリスト等で数回似たような問題が取り上げられていますが、
いまだ仕様なのかバグなのかが分からないため、メーリングリストに
投稿させていただきました。

下記と似たような問題だと思います。
http://issues.apache.org/jira/browse/AXIS-1569

私のプログラムは、
サーバー側のあるクラスの中に配列を持たせて、
クライアントに配列の値を表示する、ごくシンプルなものです。
配列には5つ値をいれているにも関わらず、クライアント側には
最後の1つの値しか返りません。

なお、上記リンクを参考にしてsetter/getterをつけたところ、RC3では動いたものの、
1.2FinalではSAXParseExceptionが発生しました。(これはまた別件になります。。。)

どなたか同じような問題に遭遇した方はいらっしゃいますでしょうか?
下記にソースコードを添付しますので、ご確認、ご意見をいただければと思います。

よろしくお願いいたします。

■サーバーサイド(Tomcat)
mysamplesのパッケージにSample01.javaとSample01Rep.javaの
2つのクラスを作りました。
*******Sample01.java*******
package mysamples;

import java.io.Serializable;

public class Sample01 implements Serializable{
   public Sample01Rep returnArray(){
       return new Sample01Rep();
   }
}
*******Sample01.java*******
package mysamples;

import java.io.Serializable;

public class Sample01Rep implements Serializable{
   public String[] name = {"name1", "name2", "name3", "name4" ,
"name5"};

   public Sample01Rep(){
   }
}

■クライアントサイド(Java)
*******Sample01Client.java*******
import mysamples.Sample01;
import mysamples.Sample01Rep;
import mysamples.Sample01Service;
import mysamples.Sample01ServiceLocator;

public class Sample01Client{
	public static void main(String[] args) throws Exception{
	    System.out.println("<< Sample01 Client >>");
	    //Make a Service
	    Sample01Service service = new Sample01ServiceLocator();

	    //Now use the service to get a stub
	    Sample01 stub = service.getsample01();

	    //Make the actual call
	    Sample01Rep rep = stub.returnArray();

	    System.out.println("length --> " + rep.getName().length);
	    for(int i=0; i<rep.getName().length; i++){
	        System.out.println("[" + rep.getName()[i] + "]");
	    }
	    System.out.println("<<  END  >>");
	}
}

■結果
<< Sample01 Client >>
length --> 1
[name5]
<<  END  >>

なお、想定される結果は下記に示している感じです。
<< Sample01 Client >>
length --> 5
[name1]
[name2]
[name3]
[name4]
[name5]
<<  END  >>

■その他
○JAVA2WSDL (host:portは省かせていただきました。)
java org.apache.axis.wsdl.Java2WSDL -o Sample01.wsdl
-lhttp://host:port/axis/services/sample01 -n sample01
mysamples.Sample01

○WSDL2JAVA
java org.apache.axis.wsdl.WSDL2Java Sample01.wsdl -s -o ClientSample
-p mysamples

○WSDD
生成されたdeploy.wsddファイル内のクラス名部分を下記のように変更しました。
(変更前)  <parameter name="className"
value="mysamples.Sample01SoapBindingImpl"/>
(変更後)  <parameter name="className" value="mysamples.Sample01"/>

○デプロイ(host:portは省かせていただきました。)
java org.apache.axis.client.AdminClient
-lhttp://host:port/axis/servlet/AxisServlet deploy.wsdd

以上です。

-----
Tiffany Chan



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



メールによる返信