¿Cómo puedo llamar correctamente a mi PHP webservice usando ksoap2-android?

Hasta ahora he creado un cliente PHP, y un cliente VB.NET que con éxito llamar a mi PHP web-service. Para conseguir este último para trabajar necesitaba usar la herramienta SoapUI de SourceForge . Me dijo que mi wsdl no era compatible con WS-I. No necesité la versión Pro para probar mi servicio interactivamente, ya que le permite editar directamente la solicitud de jabón. Después de arreglar mi WSDL y conseguir que mi cliente de VB.Net funcione con Android sigue siendo un problema.

También adjunto el código fuente de ksoap2-andriod para que pueda pasar a través de la depuración. Ayudó un poco pero hay dependencias agrupadas para las que no se incluye la fuente, en particular "kxml2 v1.6". Si alguien me puede apuntar a una fuente zip o Jar para que me gustaría apreciarlo.

Éste es el error que no puedo conseguir pasado al llamar el PHP webservice de mi cliente del androide.

org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <definitions name='naturallyIrrationalsoapserver' targetNamespace='http://www.naturallyIrrational.com'>@10:42 in java.io.InputStreamReader@44dce560) 

Su decirme que no puede analizar el WSDL \ XML – el poistion @ 10.42 es el final de la etiqueta de apertura de las definiciones.

Creo que como el WSDL en WS-I ahora compatible con que el problema está entrando en este servicio de las definiciones de espacio de nombres como interpretado por Ksoap2. Aquí está mi código del cliente del androide usado para llamarla.

 public class SoapClientActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = (TextView) findViewById(R.id.myText); String soapResponse=""; final String METHOD_NAME = "getArrval"; final String SOAP_ACTION = "http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.wsdl"; final String NAMESPACE = "http://www.naturallyIrrational.com"; 

* Esta línea siguiente fue incorrecta y debe apuntar a http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.php *

  final String URL = "http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.wsdl"; if (InternetStatus.getInstance(this).isOnline(this)) { try{ SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); PropertyInfo pi = new PropertyInfo(); pi.setName("valname"); pi.setValue("rt2"); pi.setType(String.class); request.addProperty(pi); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet=false; envelope.setOutputSoapObject(request); HttpTransportSE andHttpTransport = new HttpTransportSE(URL); andHttpTransport.debug = true; andHttpTransport.call(SOAP_ACTION, envelope); 

* Hay algo mal con devolver este valor, se ha recibido pero lanza un error cuando se pasa de ksoap *

  soapResponse = (String) envelope.getResponse(); //Exception is thrown here String strrequest = andHttpTransport.requestDump; String strresponse = andHttpTransport.responseDump; }catch(Exception e){soapResponse = "Nope not working "+"\n\n" + e.getMessage() + "/n/n" + e.getStackTrace() ;} } else {soapResponse="You are not online"; } tv.setText(soapResponse); } } 

Si estoy haciendo algo tonto y alguien puede señalarlo, lo agradecería.

¿Existe una directiva para no almacenar en caché y reutilizar wsdl en Android como si estuviera en PHP?

Tal vez el uso de net beans ayudará, que es el siguiente cuando tengo tiempo. Si alguien puede por favor ayudar en el ínterin, no dude en sugerir algo.

 <?php class naturallyIrrational { private $arrval = array("pi" => 3.1415,"e" => 2.7183, "rt2" => 1.414, "phi" => 1.618 ); function getIrrationalvalue($valname) { $myFile = "logFile.html"; $fh = fopen($myFile, 'a') or die("can't open file"); $datq = date('m/d/Y h:i:s a', time()); fwrite($fh, $datq); if (isset($this->arrval[$valname])) { $stringData = " ".$valname." = ".$this->arrval[$valname]."<br/>"; fwrite($fh, $stringData); fclose($fh); return $this->arrval[$valname]; } else { throw new SoapFault("Server","Unknown Symbol '$valname'."); } } } $server = new SoapServer("naturallyIrrational.wsdl"); $server->setClass("naturallyIrrational"); $server->handle(); 

Desarrollé reactivamente un servicio web de Restful. Había muchas razones para desarrollar el servicio web como un resto más que el SOAP. Hice un proyecto muy pequeño en el jabón apenas para conseguir el cuadro grande entonces movido para desarrollar en restful mientras que es más ventajas. Para desarrollar ambos modelos, Netbeans IDE proporciona instalaciones muy convenientes. Leer Ruta de aprendizaje de servicios web

Ese vínculo contiene tanto descanso y SOAP / WDSL desarrollo de servicios web de manera muy fácil … Espero que esto ayude.

Descubrí que la cadena de URL debe apuntar al público php.

final String URL = "http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.php" ;

Realmente una cosa muy simple al final después de 3 semanas. Descargar el código fuente es esencial ya que me permitió ver que el servicio está funcionando. Hubo / es otro problema con respecto a los parámetros de paso, como esto:

 PropertyInfo pi = new PropertyInfo(); pi.setName("valname"); pi.setValue("rt2"); pi.setType(String.class); 

Pero esa es una pregunta diferente.

Gracias por tus comentarios.

  • BasicNetwork.performRequest: Código de respuesta inesperado 403 para http: //localhost/database/login.php
  • Cómo convertir caracteres de indicador a caracteres Unicode Escaped
  • El navegador de Android rechaza contenido-disposición: ¿en línea?
  • android enviar archivo de vídeo (mp4) a php servidor
  • La aplicación para Android publica everyThing excepto el archivo publicado
  • Envío de "alerta / notificación" al teléfono celular desde el sitio web
  • Asegurar php api para usar en la aplicación android
  • Obtención de datos de Mysql DB a listView utilizando JSON y PHP
  • Proteger la secuencia de comandos de bots y las solicitudes no deseadas que publican datos
  • Cómo ejecutar phonegap utilizando php?
  • Cómo utilizar el SSL con multi entidad en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.