liujianguang/ksoap2-android

HttpTransportSE.call method returns NullPointerException frequently

Closed this issue · 8 comments

What steps will reproduce the problem?
1.Set NAMESPACE AND METHOD_NAME to SoapObject and add required properties.
2.Wrap soap object in envelope
3.Make the call with the envelope
4.Catches NullPointerException at the call method 'FREQUENTLY', not always.

What is the expected output? What do you see instead?
To establish connection parameters to begin communicating with the server 
hosting the web service.

What version of the product are you using? On what operating system?
ksoap2-android-assembly-2.6.5-jar-with-dependencies.jar


Please provide any additional information below.

My calling code is :

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

request.addProperty("data", "value");


SoapSerializationEnvelope envelope = new 
SoapSerializationEnvelope(SoapEnvelope.VER12);

envelope.dotNet = true;
envelope.setOutputSoapObject(request);

try{
    HttpTransportSE http = new HttpTransportSE(URL);
    http.debug = true;
    System.setProperty("http.keepAlive", "false");

    http.call(SOAP_ACTION, envelope);
}catch (Exception e) {
    Log.w("Exception", e.toString());
}

Original issue reported on code.google.com by rbhhere on 6 Feb 2013 at 5:28

Try with 3.0.0

Original comment by mosa...@gmail.com on 5 Mar 2013 at 7:50

Original comment by mosa...@gmail.com on 5 Mar 2013 at 7:50

  • Changed state: Incomplete
Yes  I used 3.0.0 RC4. . problem is fixed. You can close it then I guess 

Original comment by rbhhere on 17 Apr 2013 at 12:28

Original comment by mosa...@gmail.com on 17 Apr 2013 at 3:45

  • Changed state: Fixed
when trying to call webservice from android using HttpTransportSE.call method, 
getting NullPointerException frequently. 
Used ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar

Original comment by suma.ven...@gmail.com on 24 Jun 2013 at 12:53

I also had the same issue. It happens when the server traffic is at its peak. 
At other times, it works fine. To overcome it, I enclosed the call() method in 
a loop which will loop itself 'N' times till it returns a valid SOAP object

Original comment by raba...@c2info.com on 25 Jun 2013 at 5:04

int loopCount = 0, retryCount = 5;
while ( resultString.equalsIgnoreCase("serverError") && loopCount < retryCount) 
{

try{
    HttpTransportSE http = new HttpTransportSE(URL, 120000);
    http.debug = true;
    System.setProperty("http.keepAlive", "false");
    http.call(SOAP_ACTION, envelope);
}catch (IOException e1) {
    Log.w("IOException" ,  e1.toString());          
    resultString = "serverError";
} catch (XmlPullParserException e1) {
    Log.w("XmlPullParserExc for index no :" , values[3] + " " + e1.toString());
    resultString = "serverError";
} catch (Exception e) {
    Log.w("Exception for index no :" , values[3] + " " + e.toString());     
    resultString = "serverError";
}

if(!resultString.equalsIgnoreCase("serverError")) {
    SoapPrimitive soapResult = null;
    try{
        soapResult = (SoapPrimitive)envelope.getResponse();
    }catch (SoapFault e) {
        Log.w("SoapFaultExc" ,  e.toString());
        resultString = "serverError";
    }

    if(soapResult != null){
        resultString = soapResult.toString();
    } else {
        Log.w("resultString  for index no " + values[3], "serverError");
                    resultString = "serverError";

    }
}

loopCount += 1;
}

Original comment by raba...@c2info.com on 25 Jun 2013 at 10:00

Good job. I have the same approach and it works fine. 

Original comment by mosa...@gmail.com on 25 Jun 2013 at 2:59