studio soapobject google example desde consumir code php android soap android-ksoap2

php - soapobject - soap android studio example



¿Cómo llamo correctamente a mi servicio web PHP usando ksoap2-android? (2)

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

También adjunté el código fuente para ksoap2-andriod para poder pasar mientras me depuraba. Ayudó un poco, pero hay dependencias empaquetadas para las cuales no se incluye la fuente, en particular "kxml2 v1.6". Si alguien puede indicarme una fuente zip o Jar para eso, lo agradecería.

Este es el error que no puedo pasar cuando llamo al servicio web de PHP desde mi cliente de Android.

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)

Me dice que no puede analizar WSDL / XML - the poistion @ 10.42 es el final de la etiqueta de definiciones de apertura.

Creo que como el WSDL en WS-I ahora cumple que el problema está dentro de las definiciones de este espacio de nombres de servicio interpretadas por Ksoap2. Aquí está mi código de cliente Android utilizado para llamarlo.

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";

* La siguiente línea era incorrecta y debería 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 algún error al devolver este valor, se ha recibido pero arroja un error cuando se devuelve desde 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 lo hay en PHP?

Tal vez usar net beans ayudará, eso es lo próximo cuando tenga tiempo. Si alguien puede ayudar por el momento, 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();


Recientemente desarrollé un servicio web tranquilo. Hubo muchas razones para desarrollar el servicio web como un descanso que no sea el SOAP. Hice un proyecto muy pequeño en SOAP solo para tener una idea general y luego me moví para desarrollarme en forma tranquila ya que tiene más ventajas. Para desarrollar ambos modelos, Netbeans IDE proporciona instalaciones muy convenientes. Leer el rastro de aprendizaje de servicios web

Ese enlace contiene desarrollo de servicio web tanto relajante como SOAP / WDSL de una manera muy fácil ... Espero que esto ayude.


Descubrí que la cadena de URL debe apuntar a la php pública.

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

Realmente una cosa muy simple al final después de 3 semanas. La descarga del código fuente fue esencial ya que me permitió ver que el servicio está funcionando. Hubo / hay otro problema con los parámetros de aprobación, como este:

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

pero esa es una pregunta diferente.

Gracias por tus comentarios.