【问题标题】:XMLPull Parser Exception when calling Magento api using SOAP from Android使用 Android 中的 SOAP 调用 Magento api 时出现 XMLPull Parser 异常
【发布时间】:2012-06-25 06:11:02
【问题描述】:

我正在尝试使用来自 android 的 Soap 调用 magento api,但出现 XMLpullparser 异常。我正在使用 ksoap 库。我在 google 上搜索但找不到任何解决方案。下面是我的代码..

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 }

下面是堆栈跟踪:

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   
java.io.InputStreamReader@44f13f40) 

请帮助我,我对这个错误感到非常沮丧。 提前致谢

【问题讨论】:

  • 你正在编译什么java版本?
  • 您的网址在“indieswebs.in/demostore/api/soap?wsdl=1”之间似乎有无效空格
  • @vipul:谢谢回复。我用的是jdk7,但我不认为是版本问题。
  • @Rajesh:谢谢回复。Url是正确的。空间问题是在发布但我编辑了它。您可以通过给定的URL检查webservice的响应。

标签: android magento soap ksoap2


【解决方案1】:

从对我有用的 URL 中删除后缀“?wsdl”。 希望对大家有所帮助~

【讨论】:

    【解决方案2】:

    变化:

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

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

    相关:

    【讨论】:

    • 感谢您的回复。我尝试了您的解决方案。它正在获取会话 ID,但是在我的代码中的第 40 行获取会话 ID 之后,我在此时调用“customerCustomerList”的地方我得到了相同的结果“XMlpullParser Exception”的错误,但这次我得到:org.xmlpull.v1.XmlPullParserException:预期:END_TAG {schemas.xmlsoap.org/soap/envelope}正文(位置:END_TAG {schemas.xmlsoap.org/soap/envelope}SOAP-ENV:Fault>@2:236在 java.io.InputStreamReader@44f07860)
    • 您好,如果我用“resources”更改方法名称,那么它会给我对 api v1 的响应,但对于 api V2,我无法使用调用方法获得响应。我在 mage-page.net/2012/04/magento-api-v2-soap-demystified 阅读过我不能对api V2使用调用方法,我必须直接使用方法,但我不明白如何直接使用方法。如果您了解或知道任何事情,请给我回复。谢谢
    【解决方案3】:

    我解决了我的问题。我更改了完整的代码,现在我使用的是 XMLRPC,而不是使用 SOAP。http://code.google.com/p/android-xmlrpc/ 有 XmLRPC 库以及如何使用该库的示例。

    这是如何在 android http://inchoo.net/mobile-development/android-development/parsing-the-xmlrpc-webservice-response-in-android/ 中解析此响应的链接

    希望这对某人有所帮助。

    感谢大家的回复。

    【讨论】:

    • 嘿...您能帮帮我吗,因为我也在开发相同类型的应用程序并遇到与您上面描述的相同的错误。我已经浏览了上面的链接,但没有理解任何内容..请帮帮我
    • 嘿哥们..有一些疑问..请在线时给我留言..再见
    • 我想确认我们可以使用 Magento 站点控制器中存在的方法吗?否则我们必须进行 XMLRPC api 给出的正式调用......并且。 ..我们可以获取产品的图像以显示在我们的 Android 布局中吗..如何获取它们以及如何保存它们?你教我这么多吗??
    • 我认为您可能无法直接使用 magento 站点控制器中存在的方法。您可以使用 xmlrpc magentocommerce.com/api/soap/catalog/catalog.html 获取图像。有一个方法 catalog_product_attribute_media.list.May 它有帮助
    • 好的..获取后,如何显示它们..我的意思是在哪里存储该图像以及如何存储它们??
    【解决方案4】:

    我们在这类应用上做了很多工作,我们刚刚为 Android 和 iOS 开源了一个 SDK,以简化与 Magento API 的连接。也许它可以帮助您进行开发,或者为您提供有关如何解决此问题的想法,因为我们还使用 ksoap 进行 SOAP 通信:http://github.com/agilemonkeys/meets-android

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      • 2020-05-07
      • 2021-10-16
      • 1970-01-01
      相关资源
      最近更新 更多