2015-07-27 3 views
0

Я разрабатываю приложение для Android, которое будет вызывать мыльный веб-сервис. Веб-сервис SOAP разработан в .Net. Я нашел, что в android, мы можем вызвать веб-сервис SOAP (wsdl). Я сделал то же самое для своего приложения, но у меня был другой ответ, чем в Интернете. Я разрабатывает вопрос ...Проблема с веб-службой SOAP

Мой вопрос: Я использовал ниже код для кода веб-службы вызова:

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 ; 

Для одной веб-службы, Когда я звоню из Интернета SOAP Client дает мне идеальный ответ, но когда я использовал выше код в Android, он дает мне неправильный ответ.

Просьба предложить мне, что-то не так в моем коде или мне нужно что-то добавить для получения точного ответа.

Спасибо.

+0

Я не Android людей (пока), но не могли бы вы рассказать нам, как вы включили информацию WSDL в вышеуказанный код Java? Кроме того, где указан URL конечной точки? –

ответ

0

Я использую ksoap2 и код выглядит следующим образом:

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, либо примитивный тип на основе вашего ответа.

+0

Я пробовал код выше, но он дает мне следующую ошибку, например, NullpointerException: попытка вызвать виртуальный метод «int java.lang.String.length()» на нулевом объекте refrence. Что делать? –

+0

Какая ошибка ??? – SANAT

+0

Я упомянул выше. –

0

Попробуйте, как это будет работать, вызовите этот метод внутри асинхронной задачу Doinbackground,

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(); 
      } 

     } 
+0

Я сделал то же самое, но, к сожалению, я получил тот же результат :( –

Смежные вопросы