Я пытаюсь использовать kSOAP 2 в своем приложении для Android, и когда я пытаюсь выполнить определенный запрос веб-службы, я получаю исключение «двойной идентификатор». Мне удалось найти, где это вызывается в исходном коде 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);
}
Я совсем не уверен, что это за исключение, или как я могу его исправить. Кто-нибудь знает, как обстоят дела с этим исключением?
Спасибо
Редактировать:
Следует отметить, что я также использую метод подключения к веб-сервису SOAP в версии этого приложения для iOS, и точно такой же запрос не вызывает никаких проблем.
Новая информация:
При ближайшем рассмотрении проблема, похоже, связана с ответом xml, который я получаю, содержащим элемент <diffgr:before>
, который имеет таблицы с тем же идентификатором, что и выше. Я думаю, что это причина проблемы, другие запросы, которые я выполнял до этого момента, не содержат этого элемента и не имеют исключения. Итак, чтобы добавить к вопросу: могу ли я запретить веб-службе отправлять этот блок в своем ответе или заставить kSOAP игнорировать его?