2

ksoap2 で SOAP 12 Web サービスの呼び出しをテストしました。このコードを使用して Web サービスを呼び出しました。

SoapObject request = new SoapObject(NAMESPACE, NAME);
request.addProperty("id", ID);
request.addProperty("name", "test@test.de");
request.addProperty("pw", "password");
request.addProperty("listid", 501);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.setOutputSoapObject(request);

AndroidHttpTransport client = new AndroidHttpTransport(URL);
try {
   client.call(NAMESPACE + NAME, envelope);
   Object response = envelope.getResponse();
} catch (IOException e) {
   Log.e(getClass().getSimpleName(), "IO Problem", e);
} catch (XmlPullParserException e) {
   Log.e(getClass().getSimpleName(), "Parser Problem", e);
}

次の例外が発生します。

org.xmlpull.v1.XmlPullParserException:expected: START_TAG {http://www.w3.org/2001/12/soap-envelope}Envelope (position:START_TAG <{http://schemas.xmlsoap.org/soap/envelope/}soapenv:Envelope>@1:114 in java.io.InputStreamReader@44f28a80)

これはサーバーの応答の問題ですか、それともこれまでのコードに何か問題がありますか? 他のユーザーも同じ問題を抱えているようです。Envelope を SoapEnvelope.VER11 に変更すると、さらに一歩進みます (おそらく間違った URL が原因で、SOAP サーバーからアクセス拒否の応答が返されます)、VER12 エンベロープを作成するための追加情報が不足している可能性があります。

4

5 に答える 5

4

サービスが期待するものを確認するために、エンベロープのさまざまなオプションを試しましたか?

たとえば、設定できます

envelope.dotNet = true;
envelope.headerOut = security; // this is an Element[] created before
envelope.encodingStyle = SoapEnvelope.ENC;
envelope.setAddAdornments(false);
envelope.implicitTypes = false;

そしてもっとたくさん。javadoc をチェックしてみてください。

また、プロジェクトの最新リリースを使用してksoap2-android、通常のプロジェクトにはない一連の修正を取得してsourceforgeください。

于 2010-12-02T19:05:40.883 に答える
1

この作業を行うために私がしたことは、バージョン11を使用することでした.それは私にとってはうまくいきました:-)

        // Request model
        SoapObject request = new SoapObject(namespace, Metodo);

        // Envelop model
        SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        sobre.dotNet = true;
        sobre.setOutputSoapObject(request);

        // Transport model
        HttpTransportSE transporte = new HttpTransportSE(url);

        // Let's call it :)
        transporte.call(accionSoap, sobre);

        //Result
        SoapPrimitive resultado = (SoapPrimitive) sobre.getResponse();

        tv.setText("" + resultado.toString());

私の変数:

private static final String accionSoap = "http://tempuri.org/ServicioAndroid";
private static final String Metodo = "ServicioAndroid";
private static final String namespace = "http://tempuri.org/";
private static final String url = "http://192.168.1.33/AutoEPOC_H/WS/WSAutoEPOC.asmx";

この Web サービスは、dotNet を使用して作成されました。IIS を使用して Web サービスを実行することにより、メソッド、アクション、名前空間、および URL を確認できます。

スペイン語を理解できる場合は、次のリンクを確認できます。

http://www.youtube.com/watch?v=_MMByNiwqMc

http://programa-con-google.blogspot.com/2010/12/android-como-consumir-un-servicio-web.html

これが役立つことを願っています!

于 2011-06-27T10:16:03.743 に答える
0

VR11交換してみてください

Object response = envelope.getResponse();

SoapObject reponse=(SoapObject)envelope.getResponse();
于 2010-12-02T09:38:22.760 に答える
-2

同じ問題が発生しましたが、から「PermissionDenied」という例外が発生し続けましたenvelop.getResponse

私はSOAPリクエストに何か問題があると想定し、エンベロープにいくつかの変更を試みました。最終的に、他のいくつかのボードを調べた後、これを許可するには、Androidに追加の許可が必要であることに気付きました。

したがって、Androidアプリのマニフェストに次の権限を追加します。

<uses-permission android:name="android.permission.INTERNET">
于 2010-12-18T22:40:09.367 に答える