Pregunta Cómo llamar a un servicio web SOAP en Android [cerrado]


Tengo muchos problemas para encontrar buena información sobre cómo llamar a un servicio web estándar SOAP / WSDL con Android. Todo lo que he podido encontrar son documentos muy complicados y referencias a "kSoap2" y luego un poco sobre analizarlo todo de forma manual con SAXÓFONO. OK, está bien, pero es 2008, así que pensé que debería haber una buena biblioteca para llamar a los servicios web estándar.

El servicio web es básicamente uno creado en NetBeans. Me gustaría tener soporte IDE para generar las clases de fontanería. Solo necesito la forma más fácil / más elegante de contactar a un WSDL servicio web basado en un teléfono basado en Android.


510
2017-11-18 01:32


origen


Respuestas:


Android no proporciona ningún tipo de biblioteca SOAP. Puedes escribir el tuyo o usar algo como kSOAP 2. Como nota, otros han podido compilar y usar kSOAP2 en sus propios proyectos, pero no he tenido que hacerlo.

Google ha mostrado, hasta la fecha, poco interés en agregar una biblioteca SOAP a Android. Mi sospecha es que prefieren apoyar las tendencias actuales de los servicios web hacia los servicios basados ​​en REST y el uso de JSON como formato de encapsulación de datos. O, usando XMPP para mensajes. Pero eso es solo conjetura.

Los servicios web basados ​​en XML son una tarea ligeramente no trivial en Android en este momento. Al no conocer NetBeans, no puedo hablar con las herramientas disponibles allí, pero estoy de acuerdo en que debería haber una mejor biblioteca disponible. Es posible que XmlPullParser te salve de usar SAX, pero no sé mucho sobre eso.


232
2017-11-19 21:50



org.apache.http.impl.client.DefaultHttpClient viene en el SDK de Android por defecto. Eso te conectará con el WSDL.

HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://www.example.com/" + URL);
HttpResponse response = httpClient.execute(httpGet, localContext);

95
2018-01-08 22:17



Es cierto que debido a su sobrecarga, SOAP no es la mejor opción para el intercambio de datos con dispositivos móviles. Sin embargo, puede encontrarse en una situación en la que no controle el formato de salida del servidor.

Entonces, si tiene que quedarse con SOAP, hay una biblioteca kSOAP2 parcheada para Android aquí:
http://code.google.com/p/ksoap2-android/


56
2017-10-10 10:57



Para llamar a un servicio web desde un dispositivo móvil (especialmente en un teléfono Android), he usado una forma muy simple de hacerlo. No he utilizado ninguna API de cliente de servicio web para intentar llamar al servicio web. Mi enfoque es el siguiente para hacer una llamada.

  1. Crea una conexión HTTP simple por usando la API estándar de Java HttpURLConnection.
  2. Forma una solicitud SOAP. (Puedes hacer ayuda de SOAPUI para hacer un SOAP solicitud.)
  3. Establezca el indicador doOutPut como verdadero.
  4. Establecer valores de encabezado HTTP como contenido-longitud, contenido tipo, y User-agent. No olvides para establecer el valor de la longitud del contenido ya que es obligatorio.
  5. Escriba toda la solicitud SOAP en la secuencia de salida.
  6. Llame al método para hacer una conexión y recibir la respuesta (en mi caso yo usé getResonseCode)
  7. Si su código de respuesta recibido es
    1. Significa que tiene éxito al llamar al servicio web.
  8. Ahora tome una secuencia de entrada en el mismo Conexión HTTP y recibir el objeto de cuerda Este objeto de cadena es una respuesta SOAP.
  9. Si el código de respuesta es distinto de 200 luego tomar una ErrorInput transmitir en mismo HTTPobject y recibir el error si alguno.
  10. Analizar la respuesta recibida  usando SAXParser (en mi caso) o  DOMParaser o cualquier otro análisis  mecanismo.

Implementé este procedimiento para el teléfono Android y se está ejecutando correctamente. Puedo analizar la respuesta incluso si es más de 700 KB.


30
2018-02-04 10:55



SOAP es una tecnología inadecuada para su uso en Android (o dispositivos móviles en general) debido a la sobrecarga de procesamiento / análisis que se requiere. Los servicios REST son una solución más liviana y eso es lo que yo sugeriría. Android viene con un analizador SAX, y es bastante trivial de usar. Si está absolutamente obligado a manejar / analizar SOAP en un dispositivo móvil, entonces lo siento por usted, el mejor consejo que puedo ofrecer es simplemente no usar SOAP.


27
2018-01-12 17:04



Hace aproximadamente un año estaba leyendo este hilo tratando de descubrir cómo hacer llamadas SOAP en Android: las sugerencias para construir el mío usando HttpClient me permitieron construir mi propia biblioteca SOAP para Android:

IceSoap

Básicamente le permite crear envolventes para enviar a través de una API simple de Java, luego los analiza automáticamente en objetos que usted define a través de XPath ... por ejemplo:

<Dictionary>
    <Id></Id>
    <Name></Name>
</Dictionary>

Se convierte en:

@XMLObject("//Dictionary")
public class Dictionary {
    @XMLField("Id")
    private String id;

    @XMLField("Name")
    private String name;
}

Lo estaba usando para mi propio proyecto, pero pensé que podría ayudar a otras personas, así que dediqué un tiempo a separarlo y documentarlo. Realmente me encantaría que algunas de tus pobres almas que tropiezan con este hilo mientras buscan en Google "SOAP Android" pudieran intentarlo y obtener algún beneficio.


23
2018-01-29 11:56



NO OLVIDE AGREGAR ksoap2.jar en su proyecto y también agregue el   Permiso de INTERNET en el archivo AndroidManifest

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class WebserviceActivity extends Activity {

    private static final String NAMESPACE = "https://api.authorize.net/soap/v1/";
    private static final String URL ="https://apitest.authorize.net/soap/v1/Service.asmx?wsdl"; 
    private static final String SOAP_ACTION = "https://api.authorize.net/soap/v1/AuthenticateTest";
    private static final String METHOD_NAME = "AuthenticateTest";
    private TextView lblResult;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        lblResult = (TextView) findViewById(R.id.tv);

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
        request.addProperty("name","44vmMAYrhjfhj66fhJN");
        request.addProperty("transactionKey","9MDQ7fghjghjh53H48k7e7n");
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
        envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
        try {
            androidHttpTransport.call(SOAP_ACTION, envelope);

            //SoapPrimitive  resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();
            // SoapPrimitive  resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();
            SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;


            lblResult.setText(resultsRequestSOAP.toString());
            System.out.println("Response::"+resultsRequestSOAP.toString());


        } catch (Exception e) {
            System.out.println("Error"+e);
        }

    }
}

23
2018-06-07 06:50



Tuve mi cita con KSOAP; Elegí un enfoque más simple.

Dado un archivo WSDL, cree plantillas de solicitud SOAP para cada solicitud (por ejemplo, usando la interfaz de usuario SOAP) y luego sustituya los valores para pasarlos en el código. PUBLIQUE estos datos al punto final del servicio utilizando la instancia DefaultHttpClient y obtenga la secuencia de respuesta. Analice la secuencia de respuesta utilizando un analizador XML Pull.


20
2017-12-21 16:10



Puedes echar un vistazo a WSClient ++


16
2017-07-15 08:52



Creé un nuevo cliente SOAP para la plataforma Android. Está utilizando una interfaz generada JAX-WS, pero hasta ahora es solo una prueba de concepto.

Si está interesado, intente con el ejemplo y / o mire la fuente en AndroidSOAP.


15
2017-10-19 15:42