java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive cannot be cast to org.ksoap2.serialization.SoapObject
18,191
Solution 1
if your web method returns json response as json array then use
SoapObject result= (SoapObject) envelop.getResponse();
if your web method returns json response as primitive data then use
SoapPrimitive results = (SoapPrimitive)envelop.getResponse();
so for your code use
SoapObject result= (SoapObject) envelop.getResponse();
Solution 2
The exception is on :
resultRequestSOAP = (SoapObject) envp.getResponse();
Because you can't cast the response get form SoapSerializationEnvelope
into SoapObject
Solution 3
Change this: SoapPrimitive resultsString = (SoapPrimitive)envp.getResponse();
to
SoapObject resultsString = (SoapObject) envp.getResponse();
Author by
user2648752
Updated on June 04, 2022Comments
-
user2648752 almost 2 years
I am doing soap parsing in android .These are the following steps I take while doing parsing 1) I am download ksoap2-android-assembly-2.4-jar-with-dependencies (1).jar . 2) Then I used this in this code But I am getting this error .
**java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive cannot be cast to org.ksoap2.serialization.SoapObject**
Here is my code.
package com.example.networkconnectivity; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapPrimitive; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.AndroidHttpTransport; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.widget.Toast; public class MainActivity extends Activity { private static final String SOAP_ACTION = "http://wsendpoints.bbrailapps.firstgroup.com/getVersion"; private static final String METHOD_NAME = "getVersion"; private static final String NAMESPACE = "http://wsendpoints.bbrailapps.firstgroup.com"; private static final String URL = "http://railapps.firstgroup.com/FirstGroupRailApps/services/RailAppsCAWS?wsdl"; private SoapObject resultRequestSOAP = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println("=====================" + haveNetworkConnection()); new AsyncTask<Void, Void, String>() { ProgressDialog dialog = new ProgressDialog(MainActivity.this); protected void onPreExecute() { dialog.show(); }; protected String doInBackground(Void[] params) { resultRequestSOAP = new SoapObject(NAMESPACE, METHOD_NAME); SoapSerializationEnvelope envp = new SoapSerializationEnvelope( SoapEnvelope.VER11); envp.dotNet = true; envp.setOutputSoapObject(resultRequestSOAP); AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport( URL); try { androidHttpTransport.call(SOAP_ACTION, envp); SoapPrimitive resultsString = (SoapPrimitive)envp.getResponse(); return resultRequestSOAP.toString(); } catch (Exception e) { Log.i("WS Error->", e.toString()); return e.toString(); } }; protected void onPostExecute(String result) { dialog.dismiss(); Toast.makeText(MainActivity.this, "Check Network connectivety" + result, Toast.LENGTH_LONG).show(); }; }.execute(); } public boolean haveNetworkConnection() { boolean haveConnectedWifi = false; boolean haveConnectedMobile = false; ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] netInfo = cm.getAllNetworkInfo(); for (NetworkInfo ni : netInfo) { if (ni.getTypeName().equalsIgnoreCase("WIFI")) if (ni.isConnected()) haveConnectedWifi = true; if (ni.getTypeName().equalsIgnoreCase("MOBILE")) if (ni.isConnected()) haveConnectedMobile = true; } return haveConnectedWifi || haveConnectedMobile; } }