Android kSOAP2双ID异常
我正试图在我的android应用程序中使用KSOAP2,当我试图执行一个特定的webservice请求时,我最终抛出了一个“双ID”异常。我能够在kSOAP源代码中找到抛出该异常的位置,它位于Android kSOAP2双ID异常,android,exception,ksoap2,android-ksoap2,ksoap,Android,Exception,Ksoap2,Android Ksoap2,Ksoap,我正试图在我的android应用程序中使用KSOAP2,当我试图执行一个特定的webservice请求时,我最终抛出了一个“双ID”异常。我能够在kSOAP源代码中找到抛出该异常的位置,它位于SoapSerializationEnvelope类方法public Object read()下面是该代码的摘录,显示了抛出的异常: if (id != null) { Object hlp = idMap.get(id); if (hlp
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响应引起的,该元素具有与上面相同ID的表。我认为这就是问题的原因,到目前为止我执行的其他请求中没有该元素,也没有异常。因此,要补充一个问题:我可以阻止Web服务在其响应中发送此块,还是让kSOAP忽略它?我可以通过删除Web服务发送的diffgr:before
元素来解决此问题。多亏了我才能够通过删除Web服务发送的diffgr:before
元素来解决这个问题。多亏了我也遇到了同样的问题,但是在xml响应中我没有之前的diffgr:prefore(我根本无法更改Web服务)。无论如何,问题是由于响应中的一些空值造成的。使用
我成功地去除了所有的空白元素,它的效果非常好。这是通过将响应转换为字符串来完成的,将其加载到
nu.xom.Document
元素中,从文档中删除空元素,并将其还原为InputStream,以便使用ksoap2进行解析嗯,我也遇到了同样的问题,但在xml响应中没有diffgr:before
(而且我根本无法更改Web服务). 无论如何,问题是由于响应中的一些空值造成的。使用
我成功地去除了所有的空白元素,它的效果非常好。这是通过将响应转换为字符串,将其加载到nu.xom.Document
元素中,从文档中删除空元素,并将其还原为InputStream,以便使用ksoap2进行解析来完成的