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