2012-01-30 7 views
5

Possiedo un servizio Web .Net che restituisce un oggetto serializzato semplice.Come posso lanciare o deserializzare SoapObject sul mio oggetto?

Ho il seguente codice per ottenere risposta dal mio webservice .Net. Come posso deserializzare l'XML restituito al mio oggetto?

Desidero restituire MyObject anziché SoapPrimitive.

private static SoapPrimitive callWebServiceMethod(String url, 
      String namespace, String methodName, 
      HashMap<String, Object> parameters, String soapAction) 
      throws Exception { 

     Log.i("WebService", "URL: " + url); 
     Log.i("WebService", "MethodName: " + methodName); 

     URL myurl = new URL(url); 
     URLConnection connection = myurl.openConnection(); 
     connection.setConnectTimeout(20 * 1000); 
     HttpURLConnection httpConnection = (HttpURLConnection) connection; 
     int responseCode = httpConnection.getResponseCode(); 
     if (responseCode == HttpURLConnection.HTTP_OK) 
     { 
      httpConnection.disconnect(); 
      SoapObject request = new SoapObject(namespace, methodName); 

      if (parameters != null) { 
       String[] keys = new String[0]; 
       keys = (String[]) parameters.keySet().toArray(keys); 
       Object[] vals = (Object[]) parameters.values().toArray(); 

       for (int i = 0; i < parameters.size(); i++) { 
        request.addProperty(keys[i], vals[i]); 
        Log.i("WebService", keys[i] + ": " + vals[i]); 
       } 
      } 

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

      envelope.setOutputSoapObject(request); 
      HttpTransportSE androidHttpTransport = new HttpTransportSE(url, 
        TimeOutInSeconds * 1000); 

      androidHttpTransport.call(soapAction, envelope); 
      return (SoapPrimitive) envelope.getResponse(); 
     } 
     else 
     { 
      httpConnection.disconnect(); 
      throw new Exception(
        "Http Error code: " + String.valueOf(responseCode)); 
     } 

    } 

risposta

2

non ho capire bene ma penso che si desidera che il metodo deve restituire oggetto della classe personalizzata invece oggetto SOAP.

Così ho fatto nella mia funzione simile come questo ..

SoapObject soapObject = (SoapObject) envelope.getResponse(); // SOAP Object 
    realTimeUtil = new RealTimeUtil(); // CUSTOM Object of My Class 
     if(soapObject.hasProperty("diffgram")) 
      soapObject = (SoapObject) soapObject.getProperty("diffgram"); 
       if(soapObject.hasProperty(clientName)){ 
        soapObject = (SoapObject) soapObject.getProperty(clientName); 
         for (int i = 0 ; i<soapObject.getPropertyCount(); i++){ 
           if(soapObject.hasProperty(clientName)){       
           SoapObject soapObject1 = (SoapObject) soapObject.getProperty(i); 
            if(soapObject1.hasProperty("Site")){ 

             String site = soapObject1.getProperty("Site").toString(); 
             String dateTime = soapObject1.getProperty("DateTime").toString(); 
             String clicks =soapObject1.getProperty("Clicks").toString(); 
             String orders = soapObject1.getProperty("Orders").toString(); 
             String reveneue = soapObject1.getProperty("Revenue").toString(); 
             String items = soapObject1.getProperty("Items").toString(); 

             realTimeUtil.setSite(site); 
             realTimeUtil.setClicks(clicks); 
             realTimeUtil.setDateTime(dateTime); 
             realTimeUtil.setOrders(orders); 
             realTimeUtil.setRevenue(reveneue); 
             realTimeUtil.setItem(items); 
                           } 
          } 
         } 
       } 
     return realTimeUtil; 

RealtimeUTil è di classe uno personalizzato nella mia app con poche variabili ed è metodi getter-setter.

+1

Esiste un altro metodo per deserializzare la risposta XML anziché il ciclo sulle proprietà? – breceivemail

+0

non più esperienza con l'analisi SOAP .. :) – MKJParekh