Consuming a SOAP webservice without ksoap2 in Andr

2019-02-26 01:33发布

问题:

In my Android application, i'm using ksoap2 library for consuming a soap ( & .net) webservice. It works correctly but it's very slow (for parsing, controls, loops and Base64ToBinary processes). I want to parse it more fast. Is it possible to parse it without using ksoap2? Any ideas? Thanks for your recommendations.

回答1:

You can use DefaultHttpClient to do this. In here (How to call SOAP web service with Android) you can find a code snippet.



回答2:

Android doesn't provide built-in support to SOAP . You must provide out of the box support using KSOAP2 or similar libraries

For other ideas, check this link

How to call a SOAP web service on Android

Hope it helps



回答3:

What do you mean slow? It does a http request and then parses the response. You have to do this in an async task. Memory usage will depend on the response you get. Maybe you are requesting way too much. See the wiki on how to debug!



回答4:

USE Restful webservice client

How to call Restful web service in android

Also see the Google I/O video on restful clients http://www.youtube.com/watch?feature=player_embedded&v=xHXn3Kg2IQE



回答5:

I have another problem with KSoap2. Unfortunately, ksoap2 library is not working with my webservices. So at last, I have done with default http post.

I hope this will help for someone in future.

private String makeHttpRequest(){
        try{
            String request = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns1=\"http://tempuri.org/\">"
                    +"<SOAP-ENV:Body>"
                    + "<ns1:Connect>"
                    + "<ns1:lstr_Login>xxxxx</ns1:lstr_Login>"
                    +"</ns1:Connect>"
                    +"</SOAP-ENV:Body>"
                    +"</SOAP-ENV:Envelope>";

            String soapAction = "http://tempuri.org/Connect"; //this would be your soapAction from wsdl

            StringEntity se = new StringEntity(request, HTTP.UTF_8);
            DefaultHttpClient client = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(new URI("http://xxxxxxxx.com/Storefront.asmx"));

            httpPost.addHeader("Content-Type", "text/xml; charset=utf-8");
            httpPost.addHeader("SOAPAction", soapAction);

            httpPost.setEntity(se);
            HttpResponse response = client.execute(httpPost);
            int responseStatusCode = response.getStatusLine().getStatusCode();
            Log.d(TAG, "HTTP Status code:"+responseStatusCode);
            if(responseStatusCode>=200 && responseStatusCode<300){
                //we got the success response from server. Now retrieve the value and go for usage.
                String responseStr = EntityUtils.toString(response.getEntity());
                //use this responseStr to parse with pullparsers or any
                Log.d("Response", "Response:: "+ responseStr);
                return responseStr;
            }
        }catch(Exception e){
            //Write the proper catch blocks for exceptions
            Log.e("Response Exception" , e.getMessage()+"",e);
        }
        return null;
    }