I am working on a company which has a .net website and webservices.
The webservice are wsdl soad.
I need to comunicate my android device with those webservices, so,
after a lot of research, I found ksoap2.
First, I tried a simple comunication with strings, and it works fine!
But now, I need to work with complex objects, so I followed this
tutorial: http://seesharpgears.blogspot.com/2010/ ... -with.html
It uses "KvmSerializable" for the work. But when I tried with my
webservices I get the error below:
"SoapFault - faultcode: 'a:DeserializationFailed' faultstring: 'The
formatter threw an exception while trying to deserialize the message:
There was an error while trying to deserialize parameter http://tempuri.org/:user.
The InnerException message was 'Element user from namespace http://tempuri.org/
cannot have child contents to be deserialized as an object. Please use
XmlNode[] to deserialize this pattern of XML.'. Please see
InnerException for more details.' faultactor: 'null' detail: null"
This is my code:
- Code: Select all
package Test.WebService;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class WebServiceTestActivity extends Activity {
private static final String SOAP_ACTION = "urn:asdf:qwerty:WebService:Sorter/SecurityLoginCheckPrueba"; //urn:Disval:SML:WebService:Sorter
private static final String METHOD_NAME = "SecurityLoginCheckPrueba"; //"testAndroid";
private static final String NAMESPACE = "http://tempuri.org/";//"http://tempuri.org/";
private static final String NAMESPACE_SERIALIZABLE = "urn:asdf:qwerty:Common:Serializable";
private static final String URL = "http://xxx.xx.xx.xx/Sorter.svc?wsdl"; //MI local ip
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = (TextView)findViewById(R.id.txt);
//Inicializar variable para enviar:
UserPrueba u = new UserPrueba();
u.setProperty(0, "123456");
u.setProperty(1, "s---l");
u.setProperty(2, "---");
PropertyInfo pi = new PropertyInfo();
pi.setName("user"); //Nombre de la variable del parametro del contrato
pi.setValue(u);
pi.setType(u.getClass()); //u.getClass()
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty(pi);
//request.addProperty("aux", "hola");
//Crear la llamada:
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.setOutputSoapObject(request); //soapEnvelope.bodyOut = request;
//soapEnvelope.addMapping(NAMESPACE, "u",new UserPrueba().getClass());
HttpTransportSE aht = new HttpTransportSE(URL);
//aht.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
try
{
aht.call(SOAP_ACTION, soapEnvelope);
SoapPrimitive resultString = (SoapPrimitive)soapEnvelope.getResponse();
SoapObject response = (SoapObject)soapEnvelope.getResponse();
//SoapObject response = (SoapObject)soapEnvelope.getResponse();
tv.setText("Resultado: " + resultString);
} catch(Exception e){
e.printStackTrace();
}
}
}
Any ideas? Also, is there any option to extract the .xml it creates?
Thanks

