Исключение двойного идентификатора kSOAP2

Я пытаюсь использовать 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 игнорировать его?


person Dan F    schedule 25.05.2011    source источник


Ответы (2)


Я смог решить эту проблему, удалив элемент diffgr:before, который отправлял веб-сервис. Я сделал это благодаря этот пост

person Dan F    schedule 26.05.2011

ну, у меня тоже была такая же проблема, но у меня не было diffgr:before в ответе xml (и я вообще не могу изменить веб-сервис). Во всяком случае, проблема была из-за некоторых пустых значений в ответе. Используя XOM, мне удалось удалить все пустые элементы, и это сработало как шарм. Это делается путем преобразования ответа в строку, загрузки его в элемент nu.xom.Document, удаления пустых элементов из документа и возврата его обратно в InputStream для анализа с помощью ksoap2.

person mihail    schedule 05.08.2011