Thursday 21 July 2016

Consuming SOAP Webservice using HttpURLConnection in Android

Consuming SOAP Webservice in Android using HttpUrlConnection.

Create a class like below. Please make sure to call this function in background Thread/AsyncTask/Service.

ServiceHandler.java
====================
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;

/**
 * Created by pratap.kesaboyina on 07-05-2016.
 */
public class ServiceHandler {
    /*
        requestUrl= endpoint
        methodName = namespace+ServiceMethodName
        soapxml= soap xml string
      */
    public static ServiceResponse soapWebServiceRequest(String requestUrl, String methodName, String soapBody) {

        ServiceResponse serviceResponse = new ServiceResponse();
        URL oURL = null;
        InputStream inputStream = null;
        try {
            oURL = new URL(requestUrl);
            HttpURLConnection con = (HttpURLConnection) oURL.openConnection();
            con.setRequestMethod("POST");
            con.setRequestProperty("Content-type", "text/xml; charset=utf-8");
            con.setRequestProperty("SOAPAction", methodName);

            OutputStream reqStream = con.getOutputStream();
            reqStream.write(soapBody.getBytes());

            // if 200 , then proceed
            int statusCode = con.getResponseCode();

            if (statusCode == 200) {

                inputStream = con.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

                String line = "";
                String result = "";

                while ((line = bufferedReader.readLine()) != null) {
                    result += line;
                }

            /* Close Stream */
                if (null != inputStream) {
                    inputStream.close();
                }

                serviceResponse.setIsSuccessOrFail(true);
                serviceResponse.setXmlResponse(result);
            } else {
                serviceResponse.setIsSuccessOrFail(false);
                serviceResponse.setXmlResponse("Error in Connection");
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
            serviceResponse.setIsSuccessOrFail(false);
            serviceResponse.setXmlResponse("Error in Connection");
        } catch (ProtocolException e) {
            e.printStackTrace();
            serviceResponse.setIsSuccessOrFail(false);
            serviceResponse.setXmlResponse("Error in Connection");
        } catch (IOException e) {
            e.printStackTrace();
            serviceResponse.setIsSuccessOrFail(false);
            serviceResponse.setXmlResponse("Error in Connection");
        }


        return serviceResponse;


    }


}



ServiceResponse.java
==================
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
**
 * Created by pratap.kesaboyina on 26-08-2015.
 */
public class ServiceResponse {

    // is request failed/sucess
    private boolean isSuccessOrFail;

    // if request success then xmlResponse else contains error msg
    private String xmlResponse;


    public ServiceResponse() {
    }


    public ServiceResponse(boolean isSuccessOrFail, String xmlResponse) {
        this.isSuccessOrFail = isSuccessOrFail;
        this.xmlResponse = xmlResponse;
    }


    public void setIsSuccessOrFail(boolean isSuccessOrFail) {
        this.isSuccessOrFail = isSuccessOrFail;
    }

    public boolean isSuccessOrFail() {
        return isSuccessOrFail;
    }


    public String getXmlResponse() {
        return xmlResponse;
    }

    public void setXmlResponse(String xmlResponse) {
        this.xmlResponse = xmlResponse;
    }


}