如何在Android的XMLRPC库中获取错误代码

时间:2013-01-19 11:23:10

标签: android api magento xmlrpclib

我在使用Magento API的Android项目中使用了XMLRPC library for android 当我通过使用Magneto API向Magento Store发送请求时,我收到错误 该错误包含“ ERROR CODE ”。

错误就像:

                                               this code
                                                  ||
                                                  \/
org.xmlrpc.android.XMLRPCFault: XMLRPC Fault:  [code 101]  
at org.xmlrpc.android.XMLRPCClient.callEx(XMLRPCClient.java:308)
at org.xmlrpc.android.XMLRPCMethod.run(XMLRPCMethod.java:33)
.
.
.

有谁知道,如何从异常中获取此错误代码,就像我们如何获取错误消息一样,如下所示:

try
{
  ......
  ......
}
catch(Exception e)
{
  Log.i("Error",e.getMessage());
}

1 个答案:

答案 0 :(得分:1)

您已经有错误消息,在这种情况下它只是空的。查看src / org / xmlrpc / android / XMLRPCClient.java(第216行):

if (tag.equals(Tag.FAULT)) {
    pullParser.nextTag(); // Tag.VALUE (<value>)
    Map<String, Object> map = (Map<String, Object>) iXMLRPCSerializer.deserialize(pullParser);
    String faultString = (String) map.get(Tag.FAULT_STRING);
    int faultCode = (Integer) map.get(Tag.FAULT_CODE);
    entity.consumeContent();
    throw new XMLRPCFault(faultString, faultCode);
}

这里我们调用扩展XMLRPCException的XMLRPCFault对象(src / org / xmlrpc / android / XMLRPCFault.java)。这是主要部分:

public XMLRPCFault(String faultString, int faultCode) {
    super("XMLRPC Fault: " + faultString + " [code " + faultCode + "]");
    this.faultString = faultString;
    this.faultCode = faultCode;
}

如您所见,此方法显示&#34; XMLRPC错误:[代码101]&#34;,其中faultString =&#39;&#39; (空)和faultCode = 101。顺便说一句,这是urlopen错误[Errno 101]&#34;网络无法访问&#34;。如果您使用某个代理,可能会发生这种情况。

现在关于错误处理:您使用server.py作为XML-RPC服务器。但是在代码中没有定义任何错误处理程序。您可以通过在“MyFunc”类之后添加下一行来实现:&#39;字符串:

class MyFuncs:
    def _dispatch(self, method, args):
    try:
        return getattr(self, method)(*args)
    except:
        handle_logging()
...

并在handle_logging()中实现您的日志记录。更多详情:https://docs.python.org/2/library/logging.html#logging.Logger.exception