2011-05-25 110 views
1

我试图在我的android应用程序中使用kSOAP 2,当我尝试执行特定的web服务请求时,最终出现“双ID”异常。我能找到这个地方在KSOAP源代码中被抛出,它是在SoapSerializationEnvelope类方法public Object read()这里是显示异常的代码的摘录被抛出:kSOAP2 double ID exception

 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 Web服务连接方法,以及完全相同的请求没有任何问题。

新信息:

经仔细检查,这个问题似乎是从XML响应我得到含有<diffgr:before>元件,其具有与上述相同的ID的表得到的。我认为这是问题的原因,至此我已经完成的其他请求没有这个元素,并且没有例外。因此,为了补充问题:我可以停止webservice在其响应中发送该块,还是让kSOAP忽略它?

回答

1

我能够通过删除webservice发送的diffgr:before元素来解决此问题。我这样做,谢谢this post

0

好吧,我也有同样的问题,但我在xml响应中没有diffgr:before(我根本无法更改webservice)。无论如何,这个问题是由于响应中的一些空值。使用XOM 我设法删除所有空元素,它的工作就像魅力。这是通过将响应转换为字符串,将其加载到nu.xom.Document元素中,从文档中删除空元素并将其恢复为InputStream以便使用kso​​ap2解析