studio - ksoap2-android
Cliente de servicio WSDL/SOAP de Android (7)
Acabo de completar una aplicación de Android sobre wsdl, tengo algunos consejos para agregar:
1.el recurso más importante es www.wsdl2code.com
2. puedes llevar tu nombre de usuario y contraseña con un encabezado codificado con Base64, como:
String USERNAME = "yourUsername";
String PASSWORD = "yourPassWord";
StringBuffer auth = new StringBuffer(USERNAME);
auth.append('':'').append(PASSWORD);
byte[] raw = auth.toString().getBytes();
auth.setLength(0);
auth.append("Basic ");
org.kobjects.base64.Base64.encode(raw, 0, raw.length, auth);
List<HeaderProperty> headers = new ArrayList<HeaderProperty>();
headers.add(new HeaderProperty("Authorization", auth.toString())); // "Basic V1M6"));
Vectordianzhan response = bydWs.getDianzhans(headers);
3. a veces, no está seguro de que el código ANDROID o el servidor web sea incorrecto, entonces la depuración es importante. En la muestra, capturando "XmlPullParserException", registra "requestDump" y "responseDump" en la excepción. Además, debe capturar el paquete IP con adb.
try {
Logg.i(TAG, "2 ");
Object response = androidHttpTransport.call(SOAP_ACTION, envelope, headers);
Logg.i(TAG, "requestDump: " + androidHttpTransport.requestDump);
Logg.i(TAG, "responseDump: "+ androidHttpTransport.responseDump);
Logg.i(TAG, "3");
} catch (IOException e) {
Logg.i(TAG, "IOException");
}
catch (XmlPullParserException e) {
Logg.i(TAG, "requestDump: " + androidHttpTransport.requestDump);
Logg.i(TAG, "responseDump: "+ androidHttpTransport.responseDump);
Logg.i(TAG, "XmlPullParserException");
e.printStackTrace();
}
Tengo algunos servicios web que usan WSDL / SOAP para la comunicación. Específicamente, estoy usando PHP y Nusoap para hacerlos. ¿Cómo puedo usar estos servicios web en Android? Voy a obtener un nuevo teléfono Android pronto, así que necesito saberlo.
Es fácil hacerlo con Windows Mobile y Visual Studio.
Gracias
Android no viene con la biblioteca SOAP. Sin embargo, puedes descargar la biblioteca de terceros aquí:
https://github.com/simpligility/ksoap2-android
Si necesita ayuda para usarlo, puede encontrar este hilo útil:
¿Cómo llamar a un servicio web .NET desde Android usando KSOAP2?
Creé un nuevo cliente SOAP para la plataforma Android, es utilizar interfaces JAX-WS, pero todavía es una prueba de concepto.
Si estás interesado, prueba el ejemplo y / o mira la fuente: http://wiki.javaforum.hu/display/ANDROIDSOAP/Home
Actualización: la versión 0.0.4 está fuera con el tutorial:
http://wiki.javaforum.hu/display/ANDROIDSOAP/2012/04/16/Version+0.0.4+released
http://wiki.javaforum.hu/display/ANDROIDSOAP/Step+by+step+tutorial
fundé esta herramienta para auto generar wsdl a código Android,
http://www.wsdl2code.com/Example.aspx
public void callWebService(){
SampleService srv1 = new SampleService();
Request req = new Request();
req.companyId = "1";
req.userName = "userName";
req.password = "pas";
Response response = srv1.ServiceSample(req);
}
Icesoap , que encontré ayer, parece prometedor. Funcionó en una prueba básica, pero le faltan más ejemplos.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set View to register.xml
setContentView(R.layout.register);
session = new UserSessionManeger(getApplicationContext());
login_id= (EditText) findViewById(R.id.loginid);
Suponser_id= (EditText) findViewById(R.id.sponserid);
name=(EditText) findViewById(R.id.name);
pass=(EditText) findViewById(R.id.pass);
moblie=(EditText) findViewById(R.id.mobile);
email= (EditText) findViewById(R.id.email);
placment= (EditText) findViewById(R.id.placement);
Adress= (EditText) findViewById(R.id.adress);
State = (EditText) findViewById(R.id.state);
city=(EditText) findViewById(R.id.city);
pincopde=(EditText) findViewById(R.id.pincode);
counntry= (EditText) findViewById(R.id.country);
plantype= (EditText) findViewById(R.id.plantype);
mRegister = (Button)findViewById(R.id.registration);
// session.createUserLoginSession(info.getCustomerID(),info.getName(),info.getMobile(),info.getEmailID(),info.getAccountType());
mRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME1);
request.addProperty("LoginCustomerID",login_id.getText().toString());
request.addProperty("SponsorID",Suponser_id.getText().toString());
request.addProperty("Name", name.getText().toString());
request.addProperty("LoginPassword",pass.getText().toString() );
request.addProperty("MobileNumber",smoblie=moblie.getText().toString());
request.addProperty("Email",email.getText().toString() );
request.addProperty("Placement", placment.getText().toString());
request.addProperty("address1", Adress.getText().toString());
request.addProperty("StateID", State.getText().toString());
request.addProperty("CityName",city.getText().toString());
request.addProperty("Pincode",pincopde.getText().toString());
request.addProperty("CountryID",counntry.getText().toString());
request.addProperty("PlanType",plantype.getText().toString());
//Declare the version of the SOAP request
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet = true;
try {
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
//this is the actual part that will call the webservice
androidHttpTransport.call(SOAP_ACTION1, envelope);
SoapObject result = (SoapObject)envelope.getResponse();
Log.e("value of result", " result"+result);
if(result!= null)
{
Toast.makeText(getApplicationContext(), "successfully register ", 2000).show() ;
}
else {
Toast.makeText(getApplicationContext(), "Try Again..", 2000).show() ;
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://example.com/CRM/Service.svc";
private static final String SOAP_ACTION = "http://tempuri.org/Login";
private static final String METHOD_NAME = "Login";
//calling web services method
String loginresult=callService(username,password,usertype);
//calling webservices
String callService(String a1,String b1,Integer c1) throws Exception {
Boolean flag=true;
do
{
try{
System.out.println(flag);
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo pa1 = new PropertyInfo();
pa1.setName("Username");
pa1.setValue(a1.toString());
PropertyInfo pb1 = new PropertyInfo();
pb1.setName("Password");
pb1.setValue(b1.toString());
PropertyInfo pc1 = new PropertyInfo();
pc1.setName("UserType");
pc1.setValue(c1);
System.out.println(c1+"this is integer****s");
System.out.println("new");
request.addProperty(pa1);
request.addProperty(pb1);
request.addProperty(pc1);
System.out.println("new2");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
System.out.println("new3");
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.setXmlVersionTag("<?xml version=/"1.0/" encoding=/"utf-8/"?>");
System.out.println("new4");
try{
androidHttpTransport.call(SOAP_ACTION, envelope);
}
catch(Exception e)
{
System.out.println(e+" this is exception");
}
System.out.println("new5");
SoapObject response = (SoapObject)envelope.bodyIn;
result = response.getProperty(0).toString();
flag=false;
System.out.println(flag);
}catch (Exception e) {
// TODO: handle exception
flag=false;
}
}
while(flag);
return result;
}
///