【问题标题】:SoapObject result of service call is always null服务调用的 SoapObject 结果始终为空
【发布时间】:2013-09-03 19:53:21
【问题描述】:

我已经按照谷歌开发者网站上的教程实现了我的 SOAP 网络服务,现在我正在编写一个调用可用服务并使用 ksoap2 库显示结果(现在在文本视图中)的 android 应用程序。 代码如下:

public class DownloadDataTask extends AsyncTask<Void, Void, SoapObject> {
private static String METHOD_NAME = "getData";
private static String SOAP_ACTION = "http://example.com/getData";
private static String WSDL_URL = "http://arduino-data-server.appspot.com/FunctionsService.wsdl";
private static String NAMESPACE = "http://example.com/";
private MainActivity caller_activity;

public DownloadDataTask(MainActivity a) {
    caller_activity = a;
}

@Override
protected SoapObject doInBackground(Void... arg0) {
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER12);
    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(WSDL_URL);

    try {
        androidHttpTransport.call(SOAP_ACTION, envelope);
        SoapObject result = (SoapObject) envelope.getResponse();
        return result;
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (XmlPullParserException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return null;
}

@Override
protected void onPostExecute(SoapObject result) {
    TextView tw = (TextView) caller_activity.findViewById(R.id.text_view);
    if (result == null) {
        tw.setText("NULL");
    } else {
        tw.setText(result.getName());
    }
}
}

但每次结果 SoapObject 都是空的。怎么了?在 appengine 服务器日志上,我可以看到 android 应用程序要求提供 wsdl 文件,但没有发送服务请求。出了什么问题(wsdl 文件可用广告 url 写在我的代码中)?

【问题讨论】:

    标签: android google-app-engine soap wsdl ksoap2


    【解决方案1】:

    Ksoap 不使用 wsdl(因此不请求它)。您应该传递服务 url 而不是 wsdl url。可以在 wsdl 中找到的服务 url(服务描述部分中 address 元素的属性 location)。

    【讨论】:

    • 好的,谢谢。所以我遵循的 ksoap2 教程是错误的。它告诉我添加 wsdl url,而不是服务 url
    • 但是问题依然存在,webservice总是返回null。也许我在制作肥皂信封时出了点问题?
    • 你为什么使用SoapEnvelope.VER12? Wsdl 仅包含 1.1 版本的定义。尝试将其更改为SoapEnvelope.VER11。
    • 你也可能得到一个异常而不是webservice返回的null。
    • 最后一件事:envelope.getResponse() 可以返回SoapFault、PropertyInfo、SoapObject 甚至Vector。在您的情况下,它应该返回 SoapObjects 的 Vector,所以这个 (SoapObject) envelope.getResponse() 将抛出类转换异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多