kSOAP2双ID异常

时间:2011-05-25 19:48:55

标签: android exception ksoap2 android-ksoap2 ksoap

我试图在我的Android应用程序中使用kSOAP 2,当我尝试执行特定的Web服务请求时,我最终会抛出“双ID”异常。我能够在kSOAP源代码中找到它被抛出的位置,它位于SoapSerializationEnvelope类方法public Object read()这里是该代码的摘录,显示抛出的异常:

        if (id != null) {
            Object hlp = idMap.get(id);
            if (hlp instanceof FwdRef) {
                FwdRef f = (FwdRef) hlp;
                do {
                    if (f.obj instanceof KvmSerializable)
                        ((KvmSerializable) f.obj).setProperty(f.index, obj);
                    else
                        ((Vector) f.obj).setElementAt(obj, f.index);
                    f = f.next;
                } while (f != null);
            } else if (hlp != null)
                throw new RuntimeException("double ID");
            idMap.put(id, obj);
        }

我完全不确定这个例外是什么,或者我如何解决它。有人知道这个例外的处理是什么吗?

由于

编辑:

应该注意的是,我也在这个应用程序的iOS版本中使用SOAP webservice连接方法,同样的确切请求没有任何问题。

新信息:

仔细检查后,问题似乎是由于我得到的xml响应包含<diffgr:before>元素,该元素具有与上述ID相同的表。我认为这是问题的原因,到目前为止我执行的其他请求中没有该元素,并且没有异常。所以要添加问题:我可以阻止web服务在其响应中发送此块,还是让kSOAP忽略它?

2 个答案:

答案 0 :(得分:1)

我能够通过删除webservice发送的diffgr:before元素来解决这个问题。我这样做归功于this post

答案 1 :(得分:0)

嗯,我也有同样的问题,但我在xml响应中没有diffgr:before(而且我根本无法更改web服务)。无论如何,问题是由于响应中的一些空值。使用XOM 我设法删除所有空元素,它就像魅力一样。这是通过将响应转换为字符串,将其加载到nu.xom.Document元素,从文档中删除空元素并将其还原回InputStream以使用kso​​ap2进行解析来完成的。