[英]SOAP Web Service issue
我正在开发一个将调用soap网络服务的android应用程序。 SOAP Web服务是在.Net中开发的。 我发现在android中,我们可以调用SOAP(基于wsdl的Web服务)。 我为我的应用做了同样的事情,但是得到的回应与网络不同。 我正在详细说明这个问题...
我的问题是:我已使用以下代码进行代码Web服务调用:
SOAP_ACTION = Constants.ACTION + "o1001";
METHOD_NAME = "o1001";
SoapObject request = new SoapObject(Constants.NAMESPACE, METHOD_NAME);
request.addProperty (
"p1",email);
request.addProperty (
"p2",pass);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject (request);
envelope.dotNet = true;
HttpTransportSE androidHttpTransport = new HttpTransportSE(Constants.URL);
androidHttpTransport.debug = true;
String s = "";
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
s = androidHttpTransport.responseDump;
Log.v("Soap Webservice", s);
}
catch (Exception e
) {
e.printStackTrace();
}
return s ;
对于相同的Web服务,当我从Online SOAP Client调用时,它会给我完美的响应,但是当我在Android中使用以上代码时,它给我错误的响应。
请建议我,无论我的代码有什么问题还是我需要添加一些内容以获得准确的响应。
谢谢。
我正在使用ksoap2,代码看起来像这样:
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject (request);
envelope.dotNet = true;
HttpTransportSE ht = new HttpTransportSE(url);
request.addProperty ("userName", etUserName.getText().toString());
ht.call (SOAP_ACTION, envelope);
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
在这里,您可以使用envelope.getResponse()
或envelope.bodyIn()
获得响应。 根据您的响应,您将获得Object或Primitive类型。
尝试这样,它将起作用,在Async任务Doinbackground中调用This Method ,
public void getdata(String SearchValue)
{
// Create request
SoapObject request = new SoapObject(NAMESPACE2, METHOD_NAME2);
PropertyInfo pi4 = new PropertyInfo();
pi4.setName("City");
pi4.setValue(SearchValue);// get the string that is to be sent to the webservice
pi4.setType(String.class);
request.addProperty(pi4);
// Create envelope
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
// Set output SOAP object
envelope.setOutputSoapObject(request);
// Create HTTP call object
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL2);
try {
// Invole web service
androidHttpTransport.call(SOAP_ACTION2, envelope);
// Get the response
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
//Converting string to Array list
ArrayList<String> Servciecityname_arr= new ArrayList<String>();
if ((response.toString()).contains("{"))
{
SoapObject rep = (SoapObject) envelope.bodyIn;
JSONArray jr = new JSONArray(rep.getPropertyAsString(0));
for (int i = 0; i < jr.length(); i++) {
JSONObject jb = (JSONObject) jr.get(i);
Cityname = jb.getString("CityName123");
Servciecityname_arr.add(Cityname);
}
CITYNAME = new String[Servciecityname_arr.size()];
CITYNAME = Servciecityname_arr.toArray(CITYNAME);
}
else
{
Status_Response = response.toString();
}
} catch (Exception e) {
Log.i(TAG2, "Error in catch");
e.printStackTrace();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.