Cliente de servicio WSDL / SOAP de Android

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?

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); } 

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

Icesoap , que encontré ayer, parece prometedor. Funcionó en una prueba básica, pero le faltan más ejemplos.

 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(""); 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; } /// 

Acabo de completar una aplicación de Android sobre wsdl, tengo algunos consejos para agregar:

1.el recurso más importante es http://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 headers = new ArrayList(); 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(); } 
  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(); } } }); } }