私はandroidとksoap2を使っていくつかのチュートリアルを見てきました。私のサービスは、アンドロイドクライアントから石鹸サービスへのパラメータとして文字列を送るのにうまくいきます。ksoap2を使ってアンドロイドからsoapサービスにオブジェクトを渡す
ここで、オブジェクトを渡す場合は、文字列を渡す代わりに、しかし、それは私のために働くことはありません。
サーバー側では、次のWebサービス操作(jax-wsを使用しています)があります。
package soap.service.sei;
import javax.jws.WebService;
import soap.service.data.ClientProfile;
@WebService(name = "ImageSei", targetNamespace = "http://image.webservice")
public interface ImageSei {
public String getImage(ClientProfile c);
}
非常に単純です。ご覧のとおり、Webサービスの操作には 'ClientProfile'インスタンスが必要です。
package soap.service.data;
public class ClientProfile {
public int ram;
public String cpu;
public String bandwidth;
}
ここでも、非常にシンプル:サーバ側の 'ClientProfile' クラスは次のようになります。しかし、これは私のアンドロイド(クライアント)パッケージの 'ClientProfile'クラスとまったく同じですか?
アンドロイド側では、物事は少し異なります。 Webサービスを呼び出すための次のコードスニペットがあります。
ClientProfile c = new ClientProfile();
c.ram = 256;
c.cpu = "22.445";
c.bandwidth = "712.2";
prop.setName("c");
prop.setValue(c);
prop.setType(c.getClass());
request.addProperty(prop);
また、非常に簡単です。しかし、Webサービスの操作がksoap2を使ってAndroidのエミュレータで起動され、サーバー側、に、私は「ヌルを得る
package soap.service.data;
import java.util.Hashtable;
import org.ksoap2.serialization.KvmSerializable;
import org.ksoap2.serialization.PropertyInfo;
public class ClientProfile implements KvmSerializable {
public int ram;
public String cpu;
public String bandwidth;
public ClientProfile() {}
public ClientProfile(int $ram, String $cpu, String $bandwidth) {
ram = $ram;
cpu = $cpu;
bandwidth = $bandwidth;
}
@Override
public Object getProperty(int arg0) {
switch(arg0) {
case 0 :
return ram;
case 1 :
return cpu;
case 2 :
return bandwidth;
}
return null;
}
@Override
public int getPropertyCount() {
return 3;
}
@Override
public void getPropertyInfo(int index, Hashtable arg1, PropertyInfo info) {
switch(index) {
case 0 :
info.type = PropertyInfo.INTEGER_CLASS;
info.name = "ram";
break;
case 1 :
info.type = PropertyInfo.STRING_CLASS;
info.name = "cpu";
break;
case 2 :
info.type = PropertyInfo.STRING_CLASS;
info.name = "bandwidth";
break;
default :
break;
}
}
@Override
public void setProperty(int index, Object value) {
switch(index) {
case 0 :
ram = Integer.parseInt(value.toString());
break;
case 1 :
cpu = value.toString();
break;
case 2 :
bandwidth = value.toString();
break;
default :
break;
}
}
}
:私のアンドロイドプロジェクト(クライアント側)マイClientProfileクラスは次のようになります'私はパラメータとして渡されるClientProfileインスタンスを出力しようとすると。それは本当の痛みです。
すべてのチュートリアルでは、Webサービス側ではなく、Android側からのクラスパラメータが表示されます。
私は多分シリアル化の問題があると仮定していますか?いずれにせよ、例外はありません。 Webサービスからの応答がアンドロイドのクライアントに戻ってくるので、これは問題ではありません。
Webサービス側のパラメータがnullであるという根本的な問題があります。私のWebサービス操作のコードは次のとおりです。
私は完全に固執していますので、ここで助けていただければ幸いです。私は私のアンドロイドエミュレータとlocalhost上で動作しているWebサービスとの間のスープメッセージを出力する方法を知らない。
私はこれについて前に質問しましたが、残念ながら返信はありませんでした。
ありがとうございます。