2014-11-28 2 views
0

SoapObject - это ответ веб-службы, основанной на SOAP.Android: Есть ли способ конвертировать SoapObject (перенос данных XML) в объект InputStream?

Я знаю, что он содержит данные XML, потому что я протестировал веб-сервис на www.soapclient.com.

Теперь я хочу использовать XMLPullParser для синтаксического анализа ответа. XMLPullParser принимает InputStream, так есть способ конвертировать SoapObject в InputStream?

+1

почему вы тусклый преобразовать ответ SOAP в XML вместо получить подготовить ответные данные с использованием SOAP GetProperty() ? –

ответ

1

Вы можете переопределить класс конверта, заменив метод parseBody. Вот пример наследования класса:

public class SSEnv extends SoapSerializationEnvelope 
{ 
    public void parseBody(XmlPullParser parser) throws IOException, XmlPullParserException{ 

     //Yes! its modified code snipet from android dev page :) 
     int eventType = parser.getEventType(); 

     while (!(eventType == XmlPullParser.END_TAG && parser.getName().equalsIgnoreCase("body"))) { 

      if(eventType == XmlPullParser.START_DOCUMENT) { 
       System.out.println("Start document"); 
      } else if(eventType == XmlPullParser.START_TAG) { 
       System.out.println("Start tag "+parser.getName()); 
      } else if(eventType == XmlPullParser.END_TAG) { 
       System.out.println("End tag "+parser.getName()); 
      } else if(eventType == XmlPullParser.TEXT) { 
       System.out.println("Text "+parser.getText()); 
      } 
      eventType = parser.next(); 
     } 
    } 
} 

Помните, что метод разбора из SOAPEnvelope требует закрывающего тега «тело», то почему есть условие в цикле «в то время как ((типСобытии == XmlPullParser.END_TAG & & анализатор!. GetName(). equalsIgnoreCase ("тело")))». И, конечно же, после getRequest и bodyIn будет null после этой модификации.

Второй способ разобрать reponseDump из HttpTransportSE но его вид терроризма;)

вид касается Marcin