This is my coding:
private static final String METHOD_NAME ="total";
private static final String NAMESPACE ="http://tempuri.org/";
private static final String SOAP_ACTION ="http://tempuri.org/total";
private static final String URL ="http://10.0.2.2:1743/Service1.asmx";
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.tv);
tv.setText(ws());
}
private String ws() {
String result = "";
try {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
System.out.println("ohaih");
request.addProperty("Name","chris");
request.addProperty("num1",5);
request.addProperty("num2",5);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE ht = new HttpTransportSE(URL);
ht.call(SOAP_ACTION, envelope);
System.out.println("dfdjssf");
if(envelope.getResponse()!=null){
//SoapObject response = (SoapObject)envelope.bodyIn;
Object response = envelope.getResponse();
result = response.toString();
}
} catch (Exception e) {
result = e.getMessage();
}
return result;
}
}
webservice coding:
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class Service1
Inherits System.Web.Services.WebService
Public Class InfoRequest
Private NameField As String
Private num1field As Integer
Private num2field As Integer
'''<remarks/>
Public Property Name() As String
Get
Return Me.NameField
End Get
Set(ByVal value As String)
Me.NameField = value
End Set
End Property
'''<remarks/>
Public Property num1() As Integer
Get
Return Me.num1field
End Get
Set(ByVal value As Integer)
Me.num1field = value
End Set
End Property
'''<remarks/>
Public Property num2() As Integer
Get
Return Me.num2field
End Get
Set(ByVal value As Integer)
Me.num2field = value
End Set
End Property
End Class
Public Class InfoResponse
Private totalField As Integer
'''<remarks/>
Public Property total() As Integer
Get
Return Me.totalField
End Get
Set(ByVal value As Integer)
Me.totalField = value
End Set
End Property
End Class
<WebMethod()> _
Public Function total(ByVal validationRequest As InfoRequest) As InfoResponse
Dim resp As New InfoResponse
Dim req = validationRequest
Dim name As String = req.Name
Dim num1 As Integer = req.num1
Dim num2 As Integer = req.num2
Dim tot As Integer = num1 + num2
resp.total = tot
Return resp
End Function
End Class
WEBSERVICE:
REQUEST:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<total xmlns="http://tempuri.org/">
<validationRequest>
<Name>string</Name>
<num1>int</num1>
<num2>int</num2>
</validationRequest>
</total>
</soap:Body>
</soap:Envelope>
RESPONCE:
?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<HelloWorldResponse xmlns="http://tempuri.org/">
<HelloWorldResult>int</HelloWorldResult>
</HelloWorldResponse>
</soap:Body>
</soap:Envelope>
答案 0 :(得分:0)
在您的SOAP请求中,
<validationRequest>
是一种复杂的请求类型,您无法在request
中添加该属性,就像通常对基本类型所做的那样。
您需要创建一个 extends Vector
和 implements KVMSerializable
的类。
public class ValidationReq extends Vector<String> implements KvmSerializable {
@Override
public Object getProperty(int arg0) {
return this.get(arg0);
}
@Override
public int getPropertyCount() {
return this.size();
}
@Override
public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
arg2.name = "string";
arg2.type = PropertyInfo.STRING_CLASS;
}
@Override
public void setProperty(int arg0, Object arg1) {
this.add(arg1.toString());
}
}
您的类将包含您要发送的参数,您需要将该类的对象添加到request
。
示例代码段可在official KSOAP documentation。
中找到