2015-04-20 5 views
0

Я использую вызова веб-сервиса с использованием ksoap2 в андроидаполучение ошибка параметра в ksoap 2 андроида

Я получаю эту ошибку

SoapFault - faultcode: 'soap:Server' faultstring: 'Server was unable to process request. ---> The parameterized query 
java.lang.ClassCastException: org.ksoap2.SoapFault cannot be cast to org.ksoap2.serialization.SoapObject 

Я добавляю параметр, используя PropertyInfo

  PropertyInfo fromProp =new PropertyInfo(); 
      fromProp.setName("uname"); 
      fromProp.setValue("test"); 
      fromProp.setType(String.class); 
      request.addProperty(fromProp); 
      PropertyInfo toProp =new PropertyInfo(); 
      toProp.setName("pwd"); 
      toProp.setValue("test"); 
      toProp.setType(String.class); 
      request.addProperty(toProp); 

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

validLogin{uname=simar; pwd=simar; }

Вещи, которые я попробовал

1) Комментирование и раскомментировав следования линии

envelope.dotNet = true; 

2) Нет на стороне сервера ошибки, как и без параметра соединение может быть сделать и получить фиктивный результат

3) Даже Пробовал это

request.addProperty("uname","simar");

request.addProperty("pwd","simar");

ответ

0

Я слился знанием от Вашей предыдущей должности и от этого. У вас возникли проблемы с параметрами вызова (например, отсутствие косой черты в конце пространства имен «http://23.253.164.20:8096/») и с отсутствием пространства имен по параметрам uname и pwd. Я действительно рекомендую использовать SoapUI для сравнения правильного запроса с тем, что у вас есть в transport.requestDump.

Рабочий код:

public final static String URL = "http://23.253.164.20:8096/login.asmx"; 
public static final String NAMESPACE = "http://23.253.164.20:8096/"; 
public static final String SOAP_ACTION_PREFIX = "http://23.253.164.20:8096/validLogin"; 
private static final String METHOD = "validLogin"; 
public String getFahrenheit(String celsius) { 

     try { 
      // SoapEnvelop.VER11 is SOAP Version 1.1 constant 
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
        SoapEnvelope.VER12); 
      SoapObject request = new SoapObject(NAMESPACE, METHOD); 
      PropertyInfo fromProp =new PropertyInfo(); 
      fromProp.setName("uname"); 
      fromProp.setValue("test"); 
      fromProp.setType(String.class); 
      fromProp.setNamespace(NAMESPACE); 
      request.addProperty(fromProp); 
      PropertyInfo toProp =new PropertyInfo(); 
      toProp.setName("pwd"); 
      toProp.setValue("test"); 
      toProp.setType(String.class); 
      toProp.setNamespace(NAMESPACE); 
      request.addProperty(toProp); 
      //bodyOut is the body object to be sent out with this envelope 
      envelope.bodyOut = request; 
      envelope.implicitTypes=true; 
      HttpTransportSE transport = new HttpTransportSE(URL); 
      transport.debug=true; 
      try { 
//      transport.call(NAMESPACE + SOAP_ACTION_PREFIX + METHOD, envelope); 
       transport.call(SOAP_ACTION_PREFIX, envelope); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (XmlPullParserException e) { 
       e.printStackTrace(); 
      } 
      //bodyIn is the body object received with this envelope 
      if (envelope.bodyIn != null) { 
       //getProperty() Returns a specific property at a certain index. 
       SoapPrimitive resultSOAP = (SoapPrimitive) ((SoapObject) envelope.bodyIn) 
         .getProperty(0); 
       System.out.println(resultSOAP.toString()); 
      }