1

Android アプリケーションで kSOAP 2 を使用しようとしていますが、特定の Web サービス要求を実行しようとすると、「二重 ID」例外がスローされます。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);
        }

この例外が何であるか、またはどのように修正できるかはまったくわかりません。この例外の扱いを知っている人はいますか?

ありがとう

編集:

このアプリケーションの iOS バージョンでも SOAP Web サービス接続メソッドを使用していることに注意してください。まったく同じ要求で問題はありません。

新情報:

<diffgr:before>よく調べてみると、問題は、上記と同じ ID を持つテーブルを持つ要素を含む xml 応答に起因しているようです。これが問題の原因だと思います。これまでに実行した他のリクエストにはその要素がなく、例外もありません。質問に追加すると、Webサービスが応答でこのブロックを送信するのを止めるか、kSOAPにそれを無視させることができますか?

4

2 に答える 2

1

diffgr:beforeWeb サービスが送信していた要素を削除することで、これを解決できました。この投稿のおかげでそれができました

于 2011-05-26T15:43:32.153 に答える
0

まあ、私も同じ問題を抱えていdiffgr:beforeましたが、xml応答にはありませんでした(そして、Webサービスをまったく変更できません)。とにかく、問題は応答のいくつかの空の値が原因でした。XOMを使用 して、すべての空の要素を削除することができ、魅力的に機能しました。これは、応答を文字列に変換し、それをnu.xom.Document要素にロードし、ドキュメントから空の要素を削除し、ksoap2 で解析するためにそれを InputStream に戻すことによって行われます。

于 2011-08-05T12:46:39.157 に答える