¿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.
- ¿Cómo enviar una respuesta de PHP a una aplicación móvil de Android / Java?
- Devolver una gota con json
- Modelo de autenticación para la aplicación de Android
- Cargando muchas imágenes del servidor en Android
- Cómo sincronizar datos entre la aplicación android y el servidor php?
É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();
- Cómo integrar Mpesa Api con android
- ¿Dónde poner mi archivo php?
- Validar la identificación de pago de Paypal aprobada por Android en el sitio de Magento
- Agregar una cookie a una solicitud HTTP
- Cómo analizar GCM responder a eliminar identificación de registro no válido del servidor con php
- Uso del resultado de android AccountManager.getAuthToken a través de Zend_Gdata (401 no autorizado)
- Sube una foto de la cámara al servidor PHP
- Cómo hacer un servicio web (preferiblemente usando PHP) que puede ser solicitado para obtener objetos JSON por la aplicación android
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.
- Cancelar En la suscripción de facturación de aplicaciones en android
- Android File Transfer no puede ver una carpeta creada por la aplicación