Shakeeb Ayaz
Shakeeb Ayaz

Reputation: 6096

How to get the data from soap

private final String SOAPACTION="http://www.americanweddinggroup.com/API/PublicJSON/WeddingDetatils";
private final String URL="http://www.americanweddinggroup.com/API/PublicJSON.asmx" ;
private final String NAMESPACE="http://www.americanweddinggroup.com/API/";
private final String METHODNAME="WeddingDetatils";
<?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>
<WeddingDetatils xmlns="http://www.americanweddinggroup.com/API/PublicJSON">
  <EventID>string</EventID>
</WeddingDetatils>
</soap:Body>

  <?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>
<WeddingDetatilsResponse xmlns="http://www.americanweddinggroup.com/API/PublicJSON">
  <WeddingDetatilsResult>
    <eventID>string</eventID>
    <weddingVenue>string</weddingVenue>
    <weddingDate>string</weddingDate>
    <bridesName>string</bridesName>
    <groomsName>string</groomsName>
    <passwordAvailable>string</passwordAvailable>
    <thumbnailImage>string</thumbnailImage>
    <galleryImages>
      <anyType />
      <anyType />
    </galleryImages>
  </WeddingDetatilsResult>
</WeddingDetatilsResponse>
  </soap:Body>
 </soap:Envelope>

Above is the Soap details.

I am new to web services so please help me.

This is what i tried

 SoapObject request=new SoapObject(NAMESPACE, METHODNAME);
    request.addProperty("EventID",1);//in soap event value is string

    SoapSerializationEnvelope envelope=new   SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet=true;
    envelope.setOutputSoapObject(request);

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    try {
        androidHttpTransport.call(SOAPACTION, envelope);
        SoapObject response = (SoapObject) envelope.getResponse();
        // SoapPrimitive response1 = (SoapPrimitive) envelope.getResponse();
        System.out.println("No of Datas are "+response.getPropertyCount()+response);//this returns count as 8
        System.out.println("No of Datas are "+response.getAttributeCount()+response);//this returns count as 0

out put of response is

 anyType{
 eventID=anyType{};
 weddingVenue=anyType{}; 
   weddingDate=anyType{};
 bridesName=anyType{}; 
groomsName=anyType{};
 passwordAvailable=anyType{};
thumbnailImage=anyType{}; 
galleryImages=anyType{};
}

But for EventID=1 in URL it returns

<eventID>1</eventID>
<weddingVenue>The Party Place</weddingVenue>
<weddingDate>4/26/2014 12:00:00 AM</weddingDate>
<bridesName>We have some of the Longest NamesX</bridesName>
 <groomsName>Keith Tessler</groomsName>
<passwordAvailable>False</passwordAvailable>
 <thumbnailImage/>
<galleryImages/>

How to get above details like weddingVenue ="The Party Place" for eventID=1.

Upvotes: 1

Views: 2995

Answers (1)

Mel
Mel

Reputation: 1820

I would suggest you to create a data class for response having :

String eventID ="";
String weddingVenue ="";
String weddingDate ="";
String bridesName ="";
String groomsName ="";
String passwordAvailable ="";
String thumbnailImage ="";
String galleryImages ="";

and lets name it MyData.After that, create a public MyData object on top of your code (above onCreate) named data.Than replace

System.out.println("No of Datas are "+response.getPropertyCount()+response);
System.out.println("No of Datas are "+response.getAttributeCount()+response);

with code that will create an object from your data class and fill the properties. Try this;

androidHttpTransport.call(SOAPACTION, envelope);
SoapObject response = (SoapObject) envelope.getResponse();
SoapObject main = (SoapObject)response.getProperty(0); //your xml style does not inclue envelope details so i guess it will require 0th property to reach table


data.eventID = main.getProperty("eventID").toString();
data.weddinVenue = main.getProperty("weddingVenue").toString();
data.weddinDate = main.getProperty("weddingDate").toString();
data.bridesName = main.getProperty("bridesName").toString();
data.groomsName = main.getProperty("groomsName").toString();
data.passwordAvailable = main.getProperty("passwordAvailable").toString();
data.galleryImage = main.getProperty("galleryImage").toString();

After this point, you can get properties of your object by writing the required code. Note that i may have mistakes here on this code because i wrote it down just now and i don't have editor availible. Types of SOAP objects returning to me also included envelope details so main = response.getProperty(0) was a guess and hope it works. I didn't use ArrayList because service seems returning one weddins details by giving property. Hope this helps, i will try to edit and fix if i have a mistake here once i got a hand on Eclipse.

This code is taken from my project, but my envelope was different than yours. Hope it helps:

public ArrayList<Haberler> getNewsHeaders(){

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
        HttpTransportSE httpTransportSe = new HttpTransportSE(URL);
        httpTransportSe.debug = true;
        SoapObject response = null;

        try{
            httpTransportSe.call(SOAP_ACTION, envelope);
            Log.i("call", "call successfull");
            response = (SoapObject)envelope.getResponse();
            SoapObject main = (SoapObject)response.getProperty(1);
            SoapObject list = (SoapObject)main.getProperty(0);

            String a = Integer.toString(list.getPropertyCount());
            Log.i("property count", a);

            for(int i = 0; i<list.getPropertyCount(); i++){
                Haberler h = new Haberler();
                SoapObject nsoap = (SoapObject)list.getProperty(i);
                if(nsoap != null){
                    h.set_id(Integer.valueOf(nsoap.getProperty("id").toString()));
                    h.set_header(nsoap.getProperty("baslik").toString());
                    h.set_category(nsoap.getProperty("kategori").toString());
                    h.set_abstract(nsoap.getProperty("ozet").toString());
                    h.set_details(nsoap.getProperty("detay").toString());
                    h.set_begindate(nsoap.getProperty("bas_tarihi").toString());
                    h.set_enddate(nsoap.getProperty("bit_tarihi").toString());
                    haberler.add(h);

                    Log.i("eklenen haber", h.get_header());

                }
            }

        }
        catch(Exception e){
            e.printStackTrace();
        }


        return haberler;
    }

Upvotes: 1

Related Questions