2012-06-25 44 views
5

Próbuję wywołać aplet magento przy użyciu Soap z Androida, ale otrzymuję wyjątek XMLpullparser. Używam biblioteki ksoap. Wyszukałem google, ale nie mogę znaleźć żadnego rozwiązania .Below jest mój kod ..Wywołanie wyjątku XMLPull podczas wywoływania apletu Magento przy użyciu SOAP z Androida

1 import java.io.IOException; 

2 import org.ksoap2.SoapEnvelope; 
3 import org.ksoap2.serialization.SoapObject; 
4 import org.ksoap2.serialization.SoapSerializationEnvelope; 
5 import org.ksoap2.transport.AndroidHttpTransport; 
6 import org.xmlpull.v1.XmlPullParserException; 

7 import android.app.Activity; 
8 import android.os.Bundle; 
9 import android.util.Log; 

10  public class MagentoSoapActivity extends Activity { 
11   /** Called when the activity is first created. */ 

12  private static final String NAMESPACE = "urn:Magento"; 
13  private static final String Method_Name="login"; 
14  private static final String URL ="http://www,mymagento,com/api/soap/?wsdl=1"; 
15  private static final String SOAP_ACTION ="urn:Magento/login"; 

16 @Override 
17 public void onCreate(Bundle savedInstanceState) { 
18 super.onCreate(savedInstanceState); 
19 setContentView(R.layout.main); 
20 try { 
21  SoapObject request = new SoapObject(NAMESPACE,Method_Name); 

22  request.addProperty("username", "XXX"); 
23  request.addProperty("apiKey", "YYY"); 
24  SoapSerializationEnvelope envelopes = new SoapSerializationEnvelope(
25    SoapEnvelope.VER11); 

26  envelopes.dotNet = false; 
27  envelopes.xsd = SoapSerializationEnvelope.XSD; 
28  envelopes.enc = SoapSerializationEnvelope.ENC; 


29  envelopes.setOutputSoapObject(request); 

30  AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL); 
31  androidHttpTransport.debug =true; 
32  androidHttpTransport.call(SOAP_ACTION, envelopes);//Getting the Exception here 
33  Object result = envelopes.getResponse(); 

34  Log.d("sessionId", result.toString()); 

35  //making call to get list of customers 

36  String sessionId = result.toString(); 

37  request = new SoapObject(NAMESPACE,"customerCustomerList"); 
38  request.addProperty("sessionId",sessionId); 

39  envelopes.setOutputSoapObject(request); 
40  androidHttpTransport.call(SOAP_ACTION, envelopes); 

41  result = envelopes.getResponse(); 

42  Log.d("Customer List", result.toString()); 

43 } catch (Exception e) { 
44  e.printStackTrace(); 
45 } 
46 } 
47 } 

Poniżej StackTrace:

org.xmlpull.v1.XmlPullParserException: expected: START_TAG 
{http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <definitions 
name='Magento' targetNamespace='urn:Magento'>@4:50 in 
[email protected]) 

Proszę mi pomóc, jestem bardzo przygnębiony tym błędzie. góry dzięki

+0

jakiej wersji java się kompilujesz? –

+0

Twój URL wydaje się mieć nieprawidłowe spacje pomiędzy "http://indieswebs.in/demostore/api/soap/? Wsdl = 1" – Rajesh

+0

@vipul: Dzięki za odpowiedź. Używam jdk7, ale nie sądzę, że to jest problem z wersją. – krushnakant

Odpowiedz

1

Rozwiązałem mój problem. Zmieniłem kompletny kod i zamiast używać SOAP teraz używam XMLRPC. Jest biblioteka XmLRPC pod adresem http://code.google.com/p/android-xmlrpc/, a także przykład użycia tej biblioteki.

tym odnośnikiem dla jak analizować tę odpowiedź w Android http://inchoo.net/mobile-development/android-development/parsing-the-xmlrpc-webservice-response-in-android/

Hope this helps kogoś.

Dziękuję wszystkim za odpowiedź.

+0

Hej ...czy możesz mi pomóc, ponieważ ja również rozwijam ten sam typ aplikacji i otrzymuję ten sam błąd, co opisałeś powyżej. Przeszedłem powyższe linki, ale nic nie zrozumiałem. Pomóż mi –

+0

hej kolego ... zachowując trochę wątpliwości .. proszę zostawić mi wiadomość, gdy jesteś online .. przeze mnie –

+0

cześć, co masz wątpliwości? – krushnakant

3

Zmiana:

private static final String URL ="http://indieswebs.in/demostore/api/soap/?wsdl=1"; 

Aby

private static final String URL ="http://indieswebs.in/demostore/api/soap"; 

Related:

+0

Dzięki za odpowiedź. Próbowałem twojego rozwiązania. Pracuję nad uzyskaniem identyfikatora sesji, ale po uzyskaniu ID sesji w wierszu 40 w moim kodzie w miejscu, w którym nazywam się "customerCustomerList" w tym miejscu, dostałem ten sam błąd co "Wyjątek XMlpullParser", ale tym razem dostałem: org.xmlpull.v1.XmlPullParserException: expected: END_TAG {http://schemas.xmlsoap.org/soap/envelope/}Body (position: END_TAG @ 2: 236 w [email protected]) – krushnakant

+0

Witam, jeśli zmienię nazwę metody na "resources", to otrzymuję odpowiedź na api v1, ale dla api V2 Nie mogę uzyskać odpowiedzi za pomocą metody call.I przeczytałem na http://mage-page.net/2012/04/magento-api-v2-soap-demystified/, że nie mogę użyć metody połączenia dla api V2 i Muszę użyć metody bezpośrednio, ale nie rozumiem, jak korzystać z metody bezpośrednio. Jeśli rozumiesz lub wiesz cokolwiek, to proszę mi dać odpowiedź. Dzięki – krushnakant

6

usunąć sufiks "? Wsdl" z adresu URL, który działa dla mnie. mam nadzieję, że to pomogło komuś ~

+1

dlaczego to pomaga? – dove

1

Pracowaliśmy nad tym typem aplikacji i właśnie otworzyliśmy pakiet SDK dla Androida i iOS, aby ułatwić połączenie z interfejsami API Magento. Może to pomaga w rozwoju lub daje pomysły, jak rozwiązać ten problem, ponieważ używamy również ksoap do komunikacji SOAP: http://github.com/agilemonkeys/meets-android

Powiązane problemy