1

我正在使用以下代码通过肥皂调用方法。它运行良好。

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.SoapFault. 如果我将行更改SoapObject result = (SoapObject) soapEnvelope.getResponse();SoapObject result = (SoapObject)soapEnvelope.bodyIn;,它会完美运行。谁能告诉我这段代码的基本内容,在哪里使用bodyIn以及在哪里使用getResponse()

4

2 回答 2

2

我用下面的代码来解决这个问题

try{
                result = (SoapObject) soapEnvelope.getResponse();
            }catch (ClassCastException e) {
                result = (SoapObject)soapEnvelope.bodyIn; 
            }

但我仍然不清楚为什么会这样。

于 2011-05-10T11:58:39.093 回答
0

如果你去那里你会看到身体没有序列化,而 get 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 回答