kSOAP2 исключение двойного идентификатора - PullRequest
1 голос
/ 25 мая 2011

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

Ответы [ 2 ]

1 голос
/ 26 мая 2011

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

0 голосов
/ 05 августа 2011

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

...