Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
683 views
in Technique[技术] by (71.8m points)

web services - REST and SOAP webservice in android

I found tutorial to use kSOAP api to use SOAP webservice. Can anyone provide me sample programs (tutorial) on getting REST webservice and SOAP webservice in android. I have googled lot but didn't find such type of tutorial.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

SOAP

Pros:

  • Langauge, platform, and transport agnostic
  • Designed to handle distributed computing environments
  • Is the prevailing standard for web services, and hence has better support from other standards (WSDL, WS-*) and tooling from vendors
  • Built-in error handling (faults)
  • Extensibility

Cons:

  • Conceptually more difficult, more "heavy-weight" than REST
  • More verbose
  • Harder to develop, requires tools

REST

Pros:

  • Language and platform agnostic
  • Much simpler to develop than SOAP
  • Small learning curve, less reliance on tools
  • Concise, no need for additional messaging layer
  • Closer in design and philosophy to the Web

Cons:

  • Assumes a point-to-point communication model--not usable for distributed computing environment where message may go through one or more intermediaries
  • Lack of standards support for security, policy, reliable messaging, etc., so services that have more sophisticated requirements are harder to develop ("roll your own")
  • Tied to the HTTP transport model

Example of REST

Use apache http jar

public void callRestWebService(){  
          System.out.println(".....REST..........");
             HttpClient httpclient = new DefaultHttpClient();  
             HttpGet request = new HttpGet(wsdlURL);  
             request.addHeader("company name", "abc");  

             request.addHeader("getAccessNumbers","http://service.xyz.com/");
             ResponseHandler<String> handler = new BasicResponseHandler();  
             try {  
                 result = httpclient.execute(request, handler); 
                 System.out.println("..result..."+result);
             } catch (ClientProtocolException e) {  
                 e.printStackTrace();  
             } catch (IOException e) {  
                 e.printStackTrace();  
             }  
             httpclient.getConnectionManager().shutdown();  

         } // end callWebService()  
     } 

Example of SOAP

You can use either ksoap or create soap xml by yourself and send to url

private boolean callSOAPWebService() {
        OutputStream out = null;
        int respCode = -1;
        boolean isSuccess = false;
        URL url = null;
        HttpsURLConnection httpURLConnection = null;

        try {

            url = new URL(wsdlURL);


            httpURLConnection = (HttpsURLConnection) url.openConnection();

            do {
                // httpURLConnection.setHostnameVerifier(DO_NOT_VERIFY);
                httpURLConnection.setRequestMethod("POST");
                httpURLConnection
                        .setRequestProperty("Connection", "keep-alive");
                httpURLConnection
                        .setRequestProperty("Content-Type", "text/xml");
                httpURLConnection.setRequestProperty("SendChunked", "True");
                httpURLConnection.setRequestProperty("UseCookieContainer",
                        "True");
                HttpURLConnection.setFollowRedirects(false);
                httpURLConnection.setDoOutput(true);
                httpURLConnection.setDoInput(true);
                httpURLConnection.setUseCaches(true);
                httpURLConnection.setRequestProperty("Content-length",
                        getReqData().length + "");
                httpURLConnection.setReadTimeout(10 * 1000);
                // httpURLConnection.setConnectTimeout(10 * 1000);
                httpURLConnection.connect();

                out = httpURLConnection.getOutputStream();

                if (out != null) {
                    out.write(getReqData());
                    out.flush();
                }

                if (httpURLConnection != null) {
                    respCode = httpURLConnection.getResponseCode();
                    Log.e("respCode", ":" + respCode);

                }
            } while (respCode == -1);

            // If it works fine
            if (respCode == 200) {
                try {
                    InputStream responce = httpURLConnection.getInputStream();
                    String str = convertStreamToString(responce);
                    System.out.println(".....data....." + new String(str));

                    // String str
                    // =Environment.getExternalStorageDirectory().getAbsolutePath()+"/sunilwebservice.txt";
                    // File f = new File(str);
                    //
                    // try{
                    // f.createNewFile();
                    // FileOutputStream fo = new FileOutputStream(f);
                    // fo.write(b);
                    // fo.close();
                    // }catch(Exception ex){
                    // ex.printStackTrace();
                    // }
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            } else {
                isSuccess = false;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (out != null) {
                out = null;
            }
            if (httpURLConnection != null) {
                httpURLConnection.disconnect();
                httpURLConnection = null;
            }
        }
        return isSuccess;
    }

    public static String createSoapHeader() {
        String soapHeader = null;

        soapHeader = "<?xml version="1.0" encoding="utf-8"?>"
                + "<soap:Envelope "
                + "xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/""
                + " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance""
                + " xmlns:xsd="http://www.w3.org/2001/XMLSchema"" + ">";
        return soapHeader;
    }

    public static byte[] getReqData() {
        StringBuilder requestData = new StringBuilder();

        requestData.append(createSoapHeader());
        requestData
                .append("<soap:Body>"
                        + "<getAccessNumbers"
                        + " xmlns="http://service.xyz.com.com/""

                        + "</getAccessNumbers> </soap:Body> </soap:Envelope>");

        return requestData.toString().trim().getBytes();
    }

    private static String convertStreamToString(InputStream is)
            throws UnsupportedEncodingException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is,
                "UTF-8"));
        StringBuilder sb = new StringBuilder();
        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "
");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();

    }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...