0

i am trying to set up connection to SOAP WebService from Android app but every time i get wried error in my result : object reference not set to an instance of an object java It seems to be error from server --> SOAP Webservice call from Java gives "Object reference not set to an instance of an object"

But when i try it throught web browser with POST request it works fine :)

This service http://ws.cdyne.com/ip2geo/ip2geo.asmx?op=ResolveIP

private static String NAMESPACE = "http://ws.cdyne.com/";
private static String URL = "http://ws.cdyne.com/ip2geo/ip2geo.asmx";
private static String SOAP_ACTION = "http://ws.cdyne.com/";

public static String invokeHelloWorldWS(String name, String webMethName) {
    String resTxt = null;

    SoapObject request = new SoapObject(NAMESPACE, webMethName);
    PropertyInfo sayHelloPI = new PropertyInfo();
    // Set name
    sayHelloPI.setName("ipAddress");
    // Set Value
    sayHelloPI.setValue("88.212.35.129");
    // Set dataType
    sayHelloPI.setType(String.class);
    // Add the property to request object
    request.addProperty(sayHelloPI);
    // 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(URL);
    androidHttpTransport.debug = true;
    try{
        // Invoke web service
        androidHttpTransport.call(SOAP_ACTION+webMethName, envelope);  //webMethName = "ResolveIP"
        // Get the response
        Log.d("a", androidHttpTransport.responseDump);
        //SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
        // Assign it to resTxt variable static variable
        //resTxt = response.toString();
    }catch(Exception e){
         //Print error
        e.printStackTrace();
    }
}

I spend lot of time on google but i cant figure right answer why this happend

// EDIT Finally i get it right ... idk why but when i send second parameter like this (i reuse old property) :

sayHelloPI.setName("licenseKey");
sayHelloPI.setValue("some_key");
sayHelloPI.setType(String.class);
request.addProperty(sayHelloPI);

it wasnt working. But when i make new Property object it works:

PropertyInfo sayHelloPI1 = new PropertyInfo();
sayHelloPI1.setName("licenseKey");
sayHelloPI1.setValue("ds");
sayHelloPI1.setType(String.class);
request.addProperty(sayHelloPI1);

Maybe it help someone next time

2
  • Are you using ksoap2? Commented Oct 7, 2014 at 22:07
  • yes i am, my friend. I know i can sipmly send POST request from android (because from browser, this way works) and i should works but i want send it like regular soap envelope Commented Oct 7, 2014 at 22:08

1 Answer 1

1

This is some code that I have used myself - Hope it will help you:

        // Initialize soap request + add parameters
        SoapObject request = new SoapObject(getString(R.string.Namespace),
                getString(R.string.Method_Name_GetStudentsByTeam));
        Log.d("GetStudentsByTeamTask", "SOAP request");

        // Use this to add parameters
        request.addProperty("teamId", params[0]);
        Log.d("GetStudentsByTeamTask", "id: " + params[0]);

        // Declare the version of the SOAP request
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        Log.d("GetStudentsByTeamTask",
                "Declared the version of the SOAP request");

        envelope.setOutputSoapObject(request);
        envelope.dotNet = true;
        Log.d("GetStudentsByTeamTask", "Setting som variables");
        try {
            HttpTransportSE androidHttpTransport = new HttpTransportSE(
                    getString(R.string.URL));
            Log.d("GetStudentsByTeamTask", "Instance the HttpTransportSE");

            // this is the actual part that will call the webservice
            androidHttpTransport.call(
                    getString(R.string.Soap_Action_GetStudentsByTeam),
                    envelope);
            Log.d("GetStudentsByTeamTask", "Called the Webservice");

            // Get the SoapResult from the envelope body.
            SoapObject result = (SoapObject) envelope.getResponse();
            Log.d("GetStudentsByTeamTask", "Got the Soapresult");

            if (result != null) {
                // Do something with result
                // success = true;
                Log.d("GetStudentsByTeamTask", "set sucess boolean to true");

                for (int i = 0; i < result.getPropertyCount(); i++) {

                    PropertyInfo pi = new PropertyInfo();
                    result.getPropertyInfo(i, pi);
                    Log.d("GetStudentsByTeamTask",
                            pi.name + " : " + result.getProperty(i));

                    SoapObject obj = (SoapObject) result.getProperty(i);

                    Student student = new Student();

                    student.address = obj.getProperty("Address").toString();

                    student.city = obj.getProperty("City").toString();
                    student.created = DateTime.parse(obj.getProperty(
                            "Created").toString());
                    student.dateOfBirth = DateTime.parse(obj.getProperty(
                            "DateOfBirth").toString());
                    student.email = obj.getProperty("Email").toString();
                    student.firstname = obj.getProperty("FirstName")
                            .toString();
                    student.id = Integer.parseInt(obj.getProperty("ID")
                            .toString());
                    student.imageId = Integer.parseInt(obj.getProperty(
                            "ImageID").toString());
                    // SoapObject lastNameObject = (SoapObject) obj
                    // .getProperty("LastName");
                    //
                    student.lastName = obj.getProperty("LastName")
                            .toString();

                    student.phone = obj.getProperty("Mobile").toString();

                    student.zipcode = obj.getProperty("PostalCode")
                            .toString();
                    student.schoolId = Integer.parseInt(obj
                            .getPropertyAsString("SchoolId"));
                    student.teamId = Integer.parseInt(obj
                            .getPropertyAsString("TeamId"));
                    student.testStarted = Integer.parseInt(obj
                            .getPropertyAsString("TestsStarted"));
                    student.timeStamp = DateTime.parse(obj
                            .getPropertyAsString("TimeStamp"));
                    student.image = getImage(Integer.parseInt(obj
                            .getProperty("ImageID").toString()));

                    if (student.image == null)
                        student.image = BitmapFactory
                                .decodeResource(getResources(),
                                        R.drawable.default_usericon);

                    MyApp.getController().addStudent(student);
                }

            } else {
                // If fails
                // success = false;
                Log.d("GetStudentsByTeamTask", "set login boolean to false");
            }
        } catch (Exception e) {
            Log.d("GetStudentsByTeamTask", "FAILED! " + e.getMessage());
            e.printStackTrace();
        }
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.