I'm trying to consume a webservice which I have in a localhost which is this one:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.1.1-b09 (branches/2.1-6834; 2011-07-16T17:14:48+0000) JAXWS-RI/2.2.5-promoted-b04 JAXWS/2.2. -->
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.1.1-b09 (branches/2.1-6834; 2011-07-16T17:14:48+0000) JAXWS-RI/2.2.5-promoted-b04 JAXWS/2.2. -->
-<definitions name="WsParkinsonControl" targetNamespace="http://parkinsoncontrol.com/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://parkinsoncontrol.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
-<types>
-<xsd:schema>
<xsd:import schemaLocation="http://localhost:8080/WsParkinsonControl/WsParkinsonControl?xsd=1" namespace="http://parkinsoncontrol.com/"/>
</xsd:schema>
-<xsd:schema>
<xsd:import schemaLocation="http://localhost:8080/WsParkinsonControl/WsParkinsonControl?xsd=2" namespace="com.parkinsoncontrol.bean"/>
</xsd:schema>
</types>
.............
-<message name="logon">
<part name="parameters" element="tns:logon"/>
</message>
-<message name="logonResponse">
<part name="parameters" element="tns:logonResponse"/>
</message>
-<portType name="WsParkinsonControl">
-<operation name="logon">
<input message="tns:logon" wsam:Action="http://parkinsoncontrol.com/WsParkinsonControl/logonRequest"/>
<output message="tns:logonResponse" wsam:Action="http://parkinsoncontrol.com/WsParkinsonControl/logonResponse"/>
</operation>
-<operation name="logon">
<soap:operation soapAction=""/>
-<input>
<soap:body use="literal"/>
</input>
-<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
-<service name="WsParkinsonControl">
-<port name="WsParkinsonControlPort" binding="tns:WsParkinsonControlPortBinding">
<soap:address location="http://localhost:8080/WsParkinsonControl/WsParkinsonControl"/>
</port>
</service>
From this wsdl file I'm trying to consume it from an Android App which I am developing, and when I try to consume it I have the next mistake:
06-08 22:20:21.376: E/AndroidRuntime(2703): FATAL EXCEPTION: main
06-08 22:20:21.376: E/AndroidRuntime(2703): android.os.NetworkOnMainThreadException
06-08 22:20:21.376: E/AndroidRuntime(2703): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
06-08 22:20:21.376: E/AndroidRuntime(2703): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
06-08 22:20:21.376: E/AndroidRuntime(2703): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
06-08 22:20:21.376: E/AndroidRuntime(2703): at java.net.InetAddress.getAllByName(InetAddress.java:214)
06-08 22:20:21.376: E/AndroidRuntime(2703): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
06-08 22:20:21.376: E/AndroidRuntime(2703): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
06-08 22:20:21.376: E/AndroidRuntime(2703): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
06-08 22:20:21.376: E/AndroidRuntime(2703): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
06-08 22:20:21.376: E/AndroidRuntime(2703): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
06-08 22:20:21.376: E/AndroidRuntime(2703): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
06-08 22:20:21.376: E/AndroidRuntime(2703): at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
06-08 22:20:21.376: E/AndroidRuntime(2703): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
06-08 22:20:21.376: E/AndroidRuntime(2703): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
06-08 22:20:21.376: E/AndroidRuntime(2703): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
06-08 22:20:21.376: E/AndroidRuntime(2703): at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197)
06-08 22:20:21.376: E/AndroidRuntime(2703): at org.ksoap2.transport.ServiceConnectionSE.openOutputStream(ServiceConnectionSE.java:126)
06-08 22:20:21.376: E/AndroidRuntime(2703): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:185)
06-08 22:20:21.376: E/AndroidRuntime(2703): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:118)
06-08 22:20:21.376: E/AndroidRuntime(2703): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:113)
06-08 22:20:21.376: E/AndroidRuntime(2703): at com.example.parkinsoncontrol.MainActivity.onClick(MainActivity.java:105)
06-08 22:20:21.376: E/AndroidRuntime(2703): at android.view.View.performClick(View.java:4204)
06-08 22:20:21.376: E/AndroidRuntime(2703): at android.view.View$PerformClick.run(View.java:17355)
06-08 22:20:21.376: E/AndroidRuntime(2703): at android.os.Handler.handleCallback(Handler.java:725)
06-08 22:20:21.376: E/AndroidRuntime(2703): at android.os.Handler.dispatchMessage(Handler.java:92)
06-08 22:20:21.376: E/AndroidRuntime(2703): at android.os.Looper.loop(Looper.java:137)
06-08 22:20:21.376: E/AndroidRuntime(2703): at android.app.ActivityThread.main(ActivityThread.java:5041)
06-08 22:20:21.376: E/AndroidRuntime(2703): at java.lang.reflect.Method.invokeNative(Native Method)
06-08 22:20:21.376: E/AndroidRuntime(2703): at java.lang.reflect.Method.invoke(Method.java:511)
06-08 22:20:21.376: E/AndroidRuntime(2703): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-08 22:20:21.376: E/AndroidRuntime(2703): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-08 22:20:21.376: E/AndroidRuntime(2703): at dalvik.system.NativeStart.main(Native Method)
I can see the mistake is on the line 105 from the file MainActivity which is the next fragment of code:
........................
private static final String SOAP_ACTION="http://parkinsoncontrol.com/logon";
private static final String METHOD_NAME="logon";
private static final String NAMESPACE="http://parkinsoncontrol.com/";
private static final String URL="http://localhost:8080/WsParkinsonControl/WsParkinsonControl?wsdl";
public void onClick(View v) {
// TODO Auto-generated method stub
SoapObject request=new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo logon= new PropertyInfo();
logon.setName("login");
logon.setValue(txtUserName.getText().toString());
logon.setType(String.class);
request.addProperty(logon);
PropertyInfo logon2= new PropertyInfo();
logon2.setName("password");
logon2.setValue(txtPassword.getText().toString());
logon2.setType(String.class);
request.addProperty(logon2);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
SoapObject result;
envelope.dotNet=false;
envelope.bodyOut=request;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(URL);
try {
httpTransport.debug=true;
httpTransport.call(SOAP_ACTION, envelope);
result= (SoapObject)envelope.bodyIn;
} catch (HttpResponseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent i = new Intent(this,MenuActivity.class);
startActivity(i);
}
..........................
The line which is the problematic one is the one which says: httpTransport.call(SOAP_ACTION, envelope); and I don't know why. Could you help me because I don't know what I'm doing wrong, please?.
Thank you in advance
You are doing the request in the main thread. Move it to a background thread like asyntask for example.