Sunday, April 14, 2013

[android help] XmlPullParserException consuming a php web service with Ksoap2 in android


I'm developing an android application that consumes a php based web service. I know there's so many questions about this, but after three days reading I can say the answers didn't help me.


By one hand I've got the php service that looks like this:


Server Side tree folder:



http://IP/WSexample/wsdl/
- hello_server.php
- hello.wsdl


PHP part (hello_server.php):



if (!extension_loaded("soap")) {
dl("php_soap.dll");
}

ini_set("soap.wsdl_cache_enabled", "0");
$server = new SoapServer("hello.wsdl");

function sayHello($yourName = '') {
if (empty($yourName)) $yourName = "Mundo";

return "Hello, ".$yourName;
}

$server->addFunction("sayHello");
$server->handle();


XML part (hello.wsdl):




targetNamespace="http://95.39.33.204/WSexample/wsdl/hello.wsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://95.39.33.204/WSexample/wsdl/hello.wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
















transport="http://schemas.xmlsoap.org/soap/http"/>



encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:examples:helloservice"
use="encoded"/>


encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:examples:helloservice"
use="encoded"/>





WSDL File for HelloService

location="http://95.39.33.204/WSexample/wsdl/hello_server.php"/>





If I try with my own php client, the server works fine and return Hello and the name I give to it, even if I try with http://validwsdl.com, it gets the proper data...Android is my problem...


I just have a simple Activity to fetch the data, but it always give me a XmlPullParserException when I use the method call of the HttpTransportSE object. The exception says:



org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG @7:49 in java.io.InputStreamReader@405701b0)


Android Code:



public class MainActivity extends Activity {
public static final String NAMESPACE="urn:examples:helloservice";
public static final String METHOD_NAME ="sayHello";
public static final String URL = "http://95.39.33.204/WSexample/wsdl/hello.wsdl";
public static final String SOAP_ACTION = "sayHello";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView) findViewById(R.id.tv);

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("firstName", "John");

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);

HttpTransportSE ht = new HttpTransportSE(URL);

try {
ht.call(SOAP_ACTION, envelope);

SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
tv.setText("Mensaje: "+response.toString());

} catch (XmlPullParserException i){
Log.e("MI_ERROR", i.getMessage());
}catch(Exception e) {
Log.e("MI_ERROR", e.getMessage());
e.printStackTrace();
}

}
}


I think I have something to do with attributes: URL, NAMESPACE, METHOD_NAME and SOAP_ACTION, I've tried changing them to other options but no success.


When I change URL attribute to:



public static final String URL = "http://95.39.33.204/WSexample/wsdl/hello_server.php";


the exception change to:



org.xmlpull.v1.XmlPullParserException: unexpected type (position:END_DOCUMENT null@1:0 in java.io.InputStreamReader@40570008)


Please help!!!



.

stackoverflow.comm

No comments:

Post a Comment

Google Voice on T-Mobile? [General]

Google Voice on T-Mobile? So I recently switched from a GNex on Verizon to a Moto X DE on T-Mobile. I had always used Google Voice for my v...