Witam, od kilku dni zmagam się z połączeniem ksoap2 z Androidem jako klient.
Sytuacja wygląda następująco. Mam napisany webservice najprostszy z możliwych klasyczny "hello".
Web Service:
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.ejb.Stateless;
/**
*
* @author bednar
*/
@WebService(serviceName = "Sendit", targetNamespace="http://bednar.org/")
@Stateless()
public class Sendit {
/**
* This is a sample web service operation
*/
@WebMethod(operationName = "hello")
public String hello(@WebParam(name = "name") String txt) {
return "Hello " + txt + " !";
}
}
Oraz klienta na Androidzie:
package bednar.org.send;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.ksoap2.serialization.PropertyInfo;
public class MainActivity extends AppCompatActivity {
private static final String NAMESPACE = "http://bednar.org/";
private static String URL = "http://192.168.2.106:8080/Sendit/Sendit?WSDL";
private static final String METHOD_NAME = "hello";
private static final String SOAP_ACTION = "http://bednar.org/hello";
private TextView lblResult;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lblResult = (TextView) findViewById(R.id.result);
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo propInfo=new PropertyInfo();
propInfo.name="txt";
propInfo.type=PropertyInfo.STRING_CLASS;
request.addProperty("hello", "John Smith");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();
lblResult.setText(resultsRequestSOAP.toString());
} catch (Exception e) {
}
}
}
Wszystko się kompiluje jak należy. Prześledziłem kod niejednokrotnie lecz nie mogę znaleźć błędu.
Sprawdziłem działanie webservisu poprzez uruchomienie w NetBeans na serverze GlassFish. W przeglądarce po wpisaniu http://localhost:8080/Sendit/Sendit?WSDL wczytuje się składnia prawidłowo oraz przy testowaniu działa jak należy.
Więc błąd raczej znajduje się po stronie klienta Androida.
Za wszystkie sugestie oraz podpowiedzi będę wdzięczny.
Doda jeszcze, że próbowałem uruchomić przykład ze strony http://www.ibm.com/developerworks/webservices/library/ws-android/index.html