繁体   English   中英

SOAP Web服务问题

[英]SOAP Web Service issue

我正在开发一个将调用soap网络服务的android应用程序。 SOAP Web服务是在.Net中开发的。 我发现在android中,我们可以调用SOAP(基于wsdl的Web服务)。 我为我的应用做了同样的事情,但是得到的回应与网络不同。 我正在详细说明这个问题...

我的问题是:我已使用以下代码进行代码Web服务调用:

    SOAP_ACTION  = Constants.ACTION + "o1001";
    METHOD_NAME  = "o1001";
    SoapObject request = new SoapObject(Constants.NAMESPACE, METHOD_NAME);

    request.addProperty (


    "p1",email);
    request.addProperty (

    "p2",pass);

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

    envelope.setOutputSoapObject (request);
    envelope.dotNet  = true;

    HttpTransportSE androidHttpTransport = new HttpTransportSE(Constants.URL);
    androidHttpTransport.debug  = true;
    String s = "";


        try {
                androidHttpTransport.call(SOAP_ACTION, envelope);
        s = androidHttpTransport.responseDump;
        Log.v("Soap Webservice", s);
    }
    catch (Exception e


        ) {
                e.printStackTrace();
    }
    return s ;

对于相同的Web服务,当我从Online SOAP Client调用时,它会给我完美的响应,但是当我在Android中使用以上代码时,它给我错误的响应。

请建议我,无论我的代码有什么问题还是我需要添加一些内容以获得准确的响应。

谢谢。

我正在使用kso​​ap2,代码看起来像这样:

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.setOutputSoapObject (request);
envelope.dotNet  = true;
HttpTransportSE ht = new HttpTransportSE(url);

request.addProperty ("userName", etUserName.getText().toString());
ht.call (SOAP_ACTION, envelope);
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();

在这里,您可以使用envelope.getResponse()envelope.bodyIn()获得响应。 根据您的响应,您将获得Object或Primitive类型。

尝试这样,它将起作用,在Async任务Doinbackground中调用This Method

public void getdata(String SearchValue) 
        {
            // Create request
            SoapObject request = new SoapObject(NAMESPACE2, METHOD_NAME2);



            PropertyInfo pi4 = new PropertyInfo();
            pi4.setName("City");
            pi4.setValue(SearchValue);// get the string that is to be sent to the webservice
            pi4.setType(String.class);
            request.addProperty(pi4);

            // Create envelope
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = true;
            // Set output SOAP object
            envelope.setOutputSoapObject(request);
            // Create HTTP call object
            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL2);

            try {
                // Invole web service
                androidHttpTransport.call(SOAP_ACTION2, envelope);
                // Get the response
                SoapPrimitive response = (SoapPrimitive) envelope.getResponse();

                //Converting string to Array list
                  ArrayList<String> Servciecityname_arr= new ArrayList<String>();


                if ((response.toString()).contains("{")) 
                {

                    SoapObject rep = (SoapObject) envelope.bodyIn;
                    JSONArray jr = new JSONArray(rep.getPropertyAsString(0));
                    for (int i = 0; i < jr.length(); i++) {
                        JSONObject jb = (JSONObject) jr.get(i);


                           Cityname = jb.getString("CityName123");


                           Servciecityname_arr.add(Cityname);

                    }

                    CITYNAME = new String[Servciecityname_arr.size()];
                    CITYNAME = Servciecityname_arr.toArray(CITYNAME);


                } 
                else
                {
                    Status_Response = response.toString();
                }

            } catch (Exception e) {
                Log.i(TAG2, "Error in catch");
                e.printStackTrace();
            }

        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM