1

我正在尝试在我的 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 忽略它?

4

2 回答 2

1

我能够通过删除diffgr:beforeweb 服务发送的元素来解决这个问题。多亏了这篇文章,我做到了

于 2011-05-26T15:43:32.153 回答
0

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

于 2011-08-05T12:46:39.157 回答