2012-01-30 1 views
5

간단한 직렬화 된 개체를 반환하는 .Net Webservice가 있습니다.어떻게 개체에 캐스트 또는 deserialize SoapObject 수 있습니까?

내 .Net 웹 서비스에서 응답을 받으려면 다음 코드를 작성하십시오. 반환 된 XML을 개체에 deserialize하려면 어떻게해야합니까?

SoapPrimitive 대신 MyObject를 반환하고 싶습니다.

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)); 
     } 

    } 

답변

2

내가 잘 이해하지하지만 난 당신이 당신의 방법은 사용자 정의 클래스 대신 SOAP 객체의 객체를 반환하도록 할 생각합니다.

그래서 나는이처럼 내 유사한 기능에서 그 짓을 ..

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은 몇 가지 변수를 내 응용 프로그램에서 하나의 사용자 정의 클래스이며 게터-setter 메소드입니다.

+1

루프에 대한 속성 대신 응답 XML을 deserialize하는 다른 방법이 있습니까? – breceivemail

+0

SOAP 파싱에 대한 더 이상의 경험이 없습니다. :) – MKJParekh