我正在使用ksoap2庫連接到wcf Web服務。當我嘗試發送原始類型時,服務器獲取這些值併發送正確的響應。但是,如果我嘗試發送複雜類型(作爲KVMSerilizable的子類型的對象),則服務器會收到空值。 下面是我想發送的對象的類定義。從android客戶端發送複雜類型到wcf服務時,服務器接收到null
import java.util.Hashtable;
import org.ksoap2.serialization.KvmSerializable;
import org.ksoap2.serialization.PropertyInfo;
public class TwoIntegerWrapper implements KvmSerializable {
private int Num1;
private int Num2;
public TwoIntegerWrapper() {
super();
}
TwoIntegerWrapper(int number1, int number2) {
super();
this.Num1 = number1;
this.Num2 = number2;
}
public int getNumber1() {
return Num1;
}
public void setNumber1(int number1) {
this.Num1 = number1;
}
public int getNumber2() {
return Num2;
}
public void setNumber2(int number2) {
this.Num2 = number2;
}
public Object getProperty(int propertyNumber) {
Object property = null;
switch (propertyNumber) {
case 0:
property = this.Num1;
break;
case 1:
property = this.Num2;
break;
}
return property;
}
public int getPropertyCount() {
return 2;
}
public void getPropertyInfo(int propertyNumber, Hashtable arg1,
PropertyInfo propertyInfo) {
switch (propertyNumber) {
case 0:
propertyInfo.type = PropertyInfo.INTEGER_CLASS;
propertyInfo.name = "Num1";
break;
case 1:
propertyInfo.type = PropertyInfo.INTEGER_CLASS;
propertyInfo.name = "Num2";
break;
}
}
public void setProperty(int propertyNumber, Object data) {
switch (propertyNumber) {
case 0:
this.Num1 = Integer.parseInt(data.toString());
break;
case 1:
this.Num2 = Integer.parseInt(data.toString());
break;
}
}
}
這裏是我如何調用Web服務。
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo property = new PropertyInfo();
TwoIntegerWrapper tiw = new TwoIntegerWrapper(num1Value, num2Value);
property.setName("TwoIntegerWrapper");
property.setType(tiw.getClass());
property.setValue(tiw);
request.addProperty(property);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
envelope.addMapping(NAMESPACE, tiw.getClass().getSimpleName(), TwoIntegerWrapper.class);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.debug = true;
try {
androidHttpTransport.call(Add_SOAP_ACTION, envelope);
Log.d(logtag + " request dump", androidHttpTransport.requestDump);
Log.d(logtag + " response dump", androidHttpTransport.responseDump);
SoapPrimitive sp = (SoapPrimitive) envelope.getResponse();
result = Integer.parseInt(sp.toString());
}
有什麼可能的原因?
後您的一些WSDL和重量誤差被退回如果有的話 – shadesco 2012-02-20 22:43:03
服務器收到一個空對象。我的請求轉儲是以下 1 3 TwoIntegerWrapper> AddNumbers2> –
iargin
2012-02-21 09:25:45
我將需要查看您的wsdl ,而不是requestDump,至少是「TwoIntegerWrapper」的消息部分,以查看在上面的代碼定義中是否有任何錯誤 – shadesco 2012-02-21 15:20:20