【问题标题】:Using wsdl 1.2 with ksoap2-android将 wsdl 1.2 与 ksoap2-android 一起使用
【发布时间】:2013-02-03 13:43:36
【问题描述】:

我正在使用 ksaop2-android 生成我的网络服务, 这是我使用的 wsdl:http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL

这是我的代码:

    String serviceUrl = "http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL";
    String methodName = "GetCityWeatherByZIP";
    SoapObject request = new SoapObject("http://ws.cdyne.com/WeatherWS/",
            methodName);
    request.addProperty("ZIP", "64101");
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER12);
    envelope.dotNet = false;
    envelope.setOutputSoapObject(request);
    HttpTransportSE ht = new HttpTransportSE(serviceUrl);
    try {
        ht.call("http://wsf.cdyne.com/WeatherWS/Weather.asmx/GetCityWeatherByZIP", envelope);
        if (envelope.getResponse() != null) {
            SoapObject soapObject = (SoapObject) envelope.getResponse();
            System.out.println(soapObject.getProperty("ResponseText"));
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (XmlPullParserException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

我可以通过这个网址得到正确的回复: http://wsf.cdyne.com/WeatherWS/Weather.asmx/GetCityWeatherByZIP?ZIP=64101

但是,我的代码给了我这样的响应:

在我们的天气数据中找不到城市。请联系 CDYNE 了解更多详情。

参数好像没有发送,可能是哪一部分出错了?

【问题讨论】:

    标签: android web-services wsdl ksoap2


    【解决方案1】:
       SoapObject request = new SoapObject(NAMESPACE, METHOD);
    
        request.addProperty("ZIP", "64101");
    
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER12);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
    
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    
        try {
            androidHttpTransport.call(SOAP_ACTION, envelope);
            .....
    
    
        } catch (Exception e) {
            e.printStackTrace();
    
        }
    

    在哪里

    SOAP_ACTION = "http://ws.cdyne.com/WeatherWS/GetCityForecastByZIP";
    URL = "http://wsf.cdyne.com/WeatherWS/Weather.asmx";
    METHOD = "GetCityForecastByZIP";
    NAMESPACE = "http://ws.cdyne.com/WeatherWS/";
    

    【讨论】:

    • 谢谢!问题是“dotnet = true”
    • 是的,很抱歉。我使用了一些我曾经使用过dotNet=true 的旧代码。无论如何,它现在对你有用吗?
    • 哦,太好了!请不要忘记支持/接受我的回答。干杯! :)
    【解决方案2】:

    试试这个:

    ht.call("http://ws.cdyne.com/WeatherWS/GetCityWeatherByZIP", envelope);
    

    代替:

    ht.call("http://wsf.cdyne.com/WeatherWS/Weather.asmx/GetCityWeatherByZIP", envelope);
    

    【讨论】:

    • 我试过了,但仍然得到相同的响应。看来参数没有被发送......
    • 或在这一行 SoapObject soapObject = (SoapObject) envelope.getResponse();尝试使用信封.bodyIn 而不是 getResponse
    • 谢谢,方法名错误。但它仍然说无效的 ZIP,所以我认为参数还没有发送
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多