0

我尝试在 android 上使用 web 服务,但在模拟器输出中出现错误:

org.xmlpull.v1.XmlPullParserException:预期:START_TAG {http://schemas.xmlsoap.org/soap/envelope/}信封(位置:START_TAG@1:6 in java.io.InputStreamReader@43e567a0)

在这里,我的代码:

package com.webServiceDeneme;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*; 

public class WebServiceDenemeActivity extends Activity {
Button btn;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    btn=(Button)findViewById(R.id.button1);
    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String NAMESPACE="http://www.vakifbank.com.tr/";
            String METHOD_NAME="faiz-maliyet-oranlari.aspx";
            String SOAP_ACTION="http://www.vakifbank.com.tr/faiz-maliyet-oranlari.aspx";
            String URL="http://192.168.2.1/VipEvents/Services/BasicServices.asmx";
            SoapObject request=new SoapObject(NAMESPACE, METHOD_NAME);

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

            try
            {
                AndroidHttpTransport aht=new AndroidHttpTransport(URL);
                aht.call(SOAP_ACTION, envelope);
                SoapPrimitive res=(SoapPrimitive)envelope.getResponse();
                btn.setText(res.toString());

            }
            catch (Exception e) {
                // TODO: handle exception
                btn.setText(e.toString());
                e.printStackTrace();
            }
        }
    });

}}

任何帮助表示赞赏。

4

1 回答 1

0

您很可能收到了非 SOAP 响应。


要转储和检查您的 SOAP 请求/响应,请设置aht.debug = true;,然后在您调用后aht.cal(...),打印值aht.requestDumpaht.responseDump输出(如外部文件或 LogCat)。

例如:

//...
aht.debug = true;
aht.call(SOAP_ACTION, envelope);

Log.e("SOAP_REQUEST", "----------------------------");
Log.e("SOAP_REQUEST", XmlUtils.format(aht.requestDump));
Log.e("SOAP_REQUEST", "----------------------------");

Log.e("SOAP_RESPONSE", "----------------------------");
Log.e("SOAP_RESPONSE", XmlUtils.format(aht.responseDump));
Log.e("SOAP_RESPONSE", "----------------------------");

其中XmlUtils类有下一个代码:

public class XmlUtils
{
    static public String format(String unformattedXml)
    {
        StringWriter writer = new StringWriter();
        try
        {
            Document doc = parseXml(unformattedXml);

            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer transformer = tf.newTransformer();
            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");          
            transformer.setOutputProperty(OutputKeys.METHOD, "xml");
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");                

            transformer.transform(new DOMSource(doc), new StreamResult(writer));
            writer.close();
        }
        catch(Exception ex)
        {
            return unformattedXml;
        }


        return writer.toString();
    }

    private static Document parseXml(String xml) throws IOException, ParserConfigurationException, SAXException
    {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        InputSource is = new InputSource(new StringReader(xml));
        return db.parse(is);        
    }

}
于 2011-07-24T00:17:05.873 回答