1

次のコードを使用して、soapでメソッドを呼び出しています。それは完全に機能しています。

private static final String SOAP_ACTION = "http://tempuri.org/GetAuthenticateUser";
    private static final String METHOD_NAME = "GetAuthenticateUser";
    private static final String NAMESPACE = "http://tempuri.org/";
    private static final String URL = "http://stage.mysite.com/FinancialSnapshotService/Service.asmx?WSDL";
   // I have tried http://stage.mysite.com/FinancialSnapshotService/Service.asmx also

    public void getResults() {

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
        request.addProperty("vstrUserID", "vk@gmail.com");
        request.addProperty("vstrPassword", "password");

        SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
        soapEnvelope.dotNet = true;
        soapEnvelope.setOutputSoapObject(request);


        HttpTransportSE aht = new HttpTransportSE(URL);

        try {
            aht.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            aht.call(SOAP_ACTION, soapEnvelope);

            SoapObject result = (SoapObject) soapEnvelope.getResponse();


            Log.d("WS", String.valueOf(result));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

しかし、同じサーバーの他のメソッドで同じコードを使用しようとすると、が表示されますClassCastException: org.ksoap2.SoapFaultSoapObject result = (SoapObject) soapEnvelope.getResponse();行をに変更するとSoapObject result = (SoapObject)soapEnvelope.bodyIn;、完全に機能します。bodyInこのコードの基本、使用場所、使用場所を誰かに教えてもらえますgetResponse()か?

4

2 に答える 2

0

そこに行くと、ボディがシリアル化されていないことがわかりますが、respose を取得すると、soapobject が既にシリアル化されています。私が間違っていたらごめんなさい。 http://ksoap2.sourceforge.net/doc/api/org/ksoap2/SoapEnvelope.html#bodyIn

私のWebサービスが内部でhtmlを提供していたので、同じ問題がありました。あなたの問題もWebサービス側でanserをエンコードすることをお勧めします。

トライアンドキャッチを追加

catch (SoapFault e) { SoapObject result = soapEnvelope.BodyIn; }

于 2011-05-09T09:34:37.740 に答える