调用soap webservice在android中准备Xml

时间:2014-09-26 07:10:19

标签: android xml web-services soap

我想在代码中使用prepare xml调用soap webservice.I搜索但是所有webservice都在调用"添加属性"参数的关键词。我正在寻找发送所有xml块以获得响应。

有人可以帮帮我吗?

我的肥皂xml;

<?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:GetSessionTicketTypes>
      <ns1:strUserName>thello</ns1:strUserName>
      <ns1:strPassword>t123</ns1:strPassword>
      <ns1:Cinema_strID>0000049</ns1:Cinema_strID>
      <ns1:Session_strID>2374</ns1:Session_strID>
    </ns1:GetSessionTicketTypes>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

1 个答案:

答案 0 :(得分:0)

我找到了解决方案;

package com.example.testparse;

import java.io.IOException;
import java.io.InputStream;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

    private final String URL = "Your URL";
    private final String SOAP_ACTION = "Soap URL";
    private final String METHOD_NAME = "GetSessionTicketTypes";

    String SOAPRequestXMLBody;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*
         * if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy
         * policy = new StrictMode.ThreadPolicy.Builder() .permitAll().build();
         * StrictMode.setThreadPolicy(policy); }
         */
        try {
            makingEnvelopAndReady(URL, METHOD_NAME, "hellotest", "st!",
                    "00050", "95");
        } catch (Exception e) {
            // TODO: handle exception
            Log.v("Excepotuion in main method : ",
                    "Excepotuion in main method : " + e);
        }
    }

    /*
     * <strUserName>string</strUserName> <strPassword>string</strPassword>
     * <Cinema_strID>string</Cinema_strID> <Session_strID>string</Session_strID>
     */

    public String makingEnvelopAndReady(String URL, String Method,
            String username, String password, String cinemaID, String sessionId) {

        SOAPRequestXMLBody = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                + "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
                + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"> "
                + "<soap:Body>"
                + "<GetSessionTicketTypes xmlns=\"http://tempuri.org/\">"
                + "<strUserName>" + username + "</strUserName>"
                + "<strPassword>" + password + "</strPassword>"
                + "<Cinema_strID>" + cinemaID + "</Cinema_strID>"
                + "<Session_strID>" + sessionId + "</Session_strID>"
                + "</GetSessionTicketTypes>" + " </soap:Body>"
                + "</soap:Envelope>";



        new RetrieveFeedTask().execute();

        return SOAPRequestXMLBody;
    }

    private byte[] callSOAPServer(String url, String soapAction, String envelope) {

        byte[] result = null;

        String temp;

        HttpParams httpParameters = new BasicHttpParams();
        // Set the timeout in milliseconds until a connection is established.
        int timeoutConnection = 35000;
        HttpConnectionParams.setConnectionTimeout(httpParameters,
                timeoutConnection);
        // Set the default socket timeout (SO_TIMEOUT)
        // in milliseconds which is the timeout for waiting for data.
        int timeoutSocket = 55000;
        HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

        DefaultHttpClient httpclient = new DefaultHttpClient(httpParameters);

        /*
         * httpclient.getCredentialsProvider().setCredentials( new
         * AuthScope("os.icloud.com", 80, null, "Digest"), new
         * UsernamePasswordCredentials(username, password));
         */
        HttpPost httppost = new HttpPost(url);
        httppost.setHeader("soapaction", soapAction);
        httppost.setHeader("Content-Type", "text/xml; charset=utf-8");

        System.out.println("executing request" + httppost.getRequestLine());
        // now create a soap request message as follows:
        final StringBuffer soap = new StringBuffer();

        soap.append("" + envelope);
        soap.append("");
        Log.i("SOAP Request", "" + soap.toString());

        try {
            HttpEntity entity = new StringEntity(soap.toString(), HTTP.UTF_8);
            httppost.setEntity(entity);

            // Response handler
               ResponseHandler rh=new ResponseHandler() {
                // invoked when client receives response
                public String handleResponse(HttpResponse response)
                  throws ClientProtocolException, IOException {

                 // get response entity
                 HttpEntity entity = response.getEntity();

                 // read the response as byte array
                       StringBuffer out = new StringBuffer();
                       byte[] b = EntityUtils.toByteArray(entity);

                       // write the response byte array to a string buffer
                       out.append(new String(b, 0, b.length));        
                       return out.toString();
                }
               };

               String responseString=httpclient.execute(httppost, rh); 
    /**************/        
               System.out.print(responseString); //result


        } catch (Exception E) {
            Log.i("Exception While Connecting", "" + E.getMessage());
            E.printStackTrace();
        }

        httpclient.getConnectionManager().shutdown(); // shut down the
                                                        // connection
        return result;
    }

    class RetrieveFeedTask extends AsyncTask<Void, Void, Void> {

        private Exception exception;

        protected void onPostExecute(Void feed) {
            // TODO: check this.exception
            // TODO: do something with the feed
        }

        @Override
        protected Void doInBackground(Void... params) {

            try {
                callSOAPServer(URL, SOAP_ACTION, SOAPRequestXMLBody);

            } catch (Exception e) {
                this.exception = e;

            }
            // TODO Auto-generated method stub
            return null;
        }
    }
}