KSoap响应和bodyIn为空

时间:2015-03-18 12:08:42

标签: android ksoap

我尝试使用KSoap和Android调用给定的Soap Web服务。 Fiddler说有正确的回应。

请求:

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header />
    <soap:Body>
       <n0:HelloWorld id="o0" c:root="1" xmlns:n0="http://Walkthrough/XmlWebServices/" />
    </soap:Body>       
</soap:Envelope>

在Fiddler看到的回应:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
     <HelloWorldResponse xmlns="http://Walkthrough/XmlWebServices/">
         <HelloWorldResult>Hello Thomas!</HelloWorldResult>
     </HelloWorldResponse>
    </soap:Body>
</soap:Envelope>

这是正确的响应,但我无法在我的代码中得到它,因为getResponse()和bodyIn为null。我的Android代码是:

private class AsyncTaskRunner extends AsyncTask<String,String,String>{
        private String resp;
        public final static String URL = "http://141.30.187.143/corbafahrsimulator/CorbaFahrsimulator.asmx?WSDL";
        public final static String NAMESPACE = "http://Walkthrough/XmlWebServices/";
        public final static String SOAP_ACTION_PREFIX = "";
        public final static String METHOD = "HelloWorld";

        @Override
        protected String doInBackground(String... params) {
            publishProgress("Loading contents");

            MySoapEnvelope envelope = new MySoapEnvelope(SoapEnvelope.VER11);
            envelope.implicitTypes = true;
            SoapObject request = new SoapObject(NAMESPACE,METHOD);
            envelope.bodyOut = request;

            HttpTransportSE transport = new HttpTransportSE(URL);
            try {
                transport.call(NAMESPACE + SOAP_ACTION_PREFIX + METHOD,envelope);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            }
            try {
                Object result = envelope.getResponse();

            } catch (SoapFault soapFault) {
                soapFault.printStackTrace();
            }

            if (envelope.bodyIn != null){
                Object so = envelope.bodyIn;
                String resultSOAP =  ((SoapObject) envelope.bodyIn).getInnerText();
                resp=resultSOAP;

            }
            return resp;
        }

        @Override
        protected void onPostExecute(String resp){
            Toast.makeText(getApplicationContext(), resp, Toast.LENGTH_LONG).show();
        }
        @Override
        protected void onProgressUpdate(String ... text){
            Toast.makeText(getApplicationContext(), text[0], Toast.LENGTH_LONG).show();
        }



    }

    private class MySoapEnvelope extends SoapSerializationEnvelope{


        public MySoapEnvelope(int version) {
            super(version);
        }

        @Override
        public void write(XmlSerializer writer) throws IOException {
            writer.setPrefix("xsi", xsi);
            writer.setPrefix("xsd", xsd);
            writer.setPrefix("c", enc);
            writer.setPrefix("soap", env);
            writer.startTag(env, "Envelope");
            writer.startTag(env, "Header");
            writeHeader(writer);
            writer.endTag(env, "Header");
            writer.startTag(env, "Body");
            writeBody(writer);
            writer.endTag(env, "Body");
            writer.endTag(env, "Envelope");
        }


    }

1 个答案:

答案 0 :(得分:0)

我找到答案:在我的Android设备上一切正常,我认为这是我的提琴手配置失败。