3

XMLRPC library for android在使用 Magento API 的 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());
}
4

1 回答 1

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

如您所见,此方法显示“XMLRPC Fault: [code 101]”,其中 faultString=''(空)和 faultCode=101。顺便说一句,这是 urlopen 错误 [Errno 101] “网络无法访问”。如果您使用某些代理,它可能会发生。

现在关于错误处理:您使用 server.py 作为 XML-RPC 服务器。但是在代码中没有定义任何错误处理程序。您可以通过在 'class MyFunc:' 字符串之后添加下一行来做到这一点:

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

于 2014-08-08T09:24:15.390 回答