ksoap:使用参数异常调用服务

时间:2013-09-24 16:24:34

标签: android web-services soap android-ksoap2

我有一个SOAP服务,它将String作为参数,我将从我的andrid代码中调用它。在我的示例代码中,我使用AsyncTask来做到这一点。在doInBackground方法中,我调用两个服务:第一个检索一些数据(没有args),第二个使用String作为参数并返回void。

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
        SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
Vector<SoapObject> result = (Vector<SoapObject>) envelope
        .getResponse();
request = new SoapObject(NAMESPACE, METHOD_NAME2);
PropertyInfo property=new PropertyInfo();
property.setName("lastDate");
property.setValue("2013/09/10 14:51:08");
property.setValue(java.lang.String.class);
request.addProperty(property);
envelope.setOutputSoapObject(request);
androidHttpTransport.call(SOAP_ACTION, envelope);

但是当我尝试拨打第二个服务(METHOD_NAME2)时,我获得了后续错误:

09-24 18:21:49.096: E/AndroidRuntime(23906): FATAL EXCEPTION: AsyncTask #1
09-24 18:21:49.096: E/AndroidRuntime(23906): java.lang.RuntimeException: An error occured while executing doInBackground()
09-24 18:21:49.096: E/AndroidRuntime(23906):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
 09-24 18:21:49.096: E/AndroidRuntime(23906):   at java.util.concurrent.FutureTask.run(FutureTask.java:239)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at java.lang.Thread.run(Thread.java:841)
09-24 18:21:49.096: E/AndroidRuntime(23906): Caused by: java.lang.RuntimeException: Cannot serialize: class java.lang.String
09-24 18:21:49.096: E/AndroidRuntime(23906):    at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:664)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:649)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:595)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:573)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:658)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at org.ksoap2.serialization.SoapSerializationEnvelope.writeBody(SoapSerializationEnvelope.java:555)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at org.ksoap2.SoapEnvelope.write(SoapEnvelope.java:205)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at org.ksoap2.transport.Transport.createRequestData(Transport.java:134)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:144)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:116)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:111)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at com.example.soapclient.DownloadDataTask.doInBackground(DownloadDataTask.java:60)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at com.example.soapclient.DownloadDataTask.doInBackground(DownloadDataTask.java:1)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
09-24 18:21:49.096: E/AndroidRuntime(23906):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
09-24 18:21:49.096: E/AndroidRuntime(23906):    ... 4 more

出了什么问题?

1 个答案:

答案 0 :(得分:0)

我认为你的问题是HttpTransportSE没有关闭第一个连接所以:

HttpTransportSE http = new HttpTransportSE(URL);
System.setProperty("http.keepAlive", "false"); 
http.call(SOAP_ACTION, envelope);

我测试了它的确有效! 最好的问候!

相关问题