KSoap soapEnvelope bodyIn и getResponse () проблема - PullRequest
1 голос
/ 09 мая 2011

Я использую следующий код для вызова метода мылом.Он работает отлично.

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()?

Ответы [ 2 ]

2 голосов
/ 10 мая 2011

Я использовал следующий код для решения этой проблемы

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

Но мне все еще не ясно, почему это происходит.

0 голосов
/ 09 мая 2011

Если вы пойдете туда, то увидите, что тело не сериализовано, а после восстановления выдает объект мыла, уже сериализованный. Это то, что я беру на себя, извини, если я ошибаюсь. http://ksoap2.sourceforge.net/doc/api/org/ksoap2/SoapEnvelope.html#bodyIn

У меня была такая же проблема, потому что мой веб-сервис давал мне html внутри, если это ваша проблема, я рекомендую вам закодировать anser на стороне веб-сервиса.

добавить попробуй и поймай

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

...