¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo consumir servicios web SOAP de SAP desde Android: Código y solución a excepción en Logcat

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 93 Vistas
0
Cargando...

Hola,

Quiero consumir los servicios web SOAP de SAP desde Android. Para eso, he escrito el siguiente código.

package com.venkattt.pack;

import java.net.SocketException;

import org.ksoap2.SoapEnvelope;

import org.ksoap2.serialization.SoapObject;

import org.ksoap2.serialization.SoapPrimitive;

import org.ksoap2.serialization.SoapSerializationEnvelope;

import org.ksoap2.transport.AndroidHttpTransport;

import org.ksoap2.transport.HttpTransportSE;

import android.app.Activity;

import android.os.Bundle;

public class SoapWebservicesExampleActivity extends Activity {

/** Llamado cuando se crea la actividad por primera vez. */

final String NAMESPACE = "urn:sap-com:document:sap:soap:functions:mc-style";

final String URL = " http://*************:8000/sap/bc/srt/wsdl/srvc_14DAE9C8D79F1EE196F1FC6C6518A345/wsdl11/allinone/ws_p... ";

final String METHOD_NAME = "Z_GET_CUST_GEN";

final String SOAP_ACTION = "urn:sap-com:document:sap:soap:functions:mc-style/Z_GET_CUST_GEN";

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); // configurar

// request.addProperty("Input", "1460");

request.addProperty("Langu", "d");

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); // poner todos los datos requeridos en un soap

envelope.dotNet = true;

envelope.setOutputSoapObject(request);

HttpTransportSE httpTransport = new HttpTransportSE(URL);

httpTransport.debug = true;

try {

httpTransport.call(SOAP_ACTION, envelope);

Object result = (Object) envelope.getResponse();

System.out.println("El resultado es "+result);

}

catch(SocketException ex){

ex.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

}

Pero al ejecutar la aplicación en Android, obtengo la siguiente excepción en mi Logcat de Eclipse:

05-25 12:29:51.445: WARN/System.err(1008): org.xmlpull.v1.XmlPullParserException: esperado: START_TAG { http://www.w3.org/2001/12/soap-envelope }Envelope (posición: START_TAG <{ http://schemas.xmlsoap.org/wsdl/ }wsdl:definitions targetNamespace='urn:sap-com:document:sap:soap:functions:mc-style'>@1:686 en java.io.InputStreamReader@405450f0)

05-25 12:29:51.455: WARN/System.err(1008): at org.kxml2.io.KXmlParser.exception(KXmlParser.java:273)
05-25 12:29:51.455: WARN/System.err(1008): at org.kxml2.io.KXmlParser.require(KXmlParser.java:1424)

Por favor, revisa una vez y házmelo saber dónde estoy cometiendo un error en mi código.

Gracias de antemano...

Venkat.A

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Hola Venkat y Kaushal,

Para acceder al servicio web de SAP desde Android utilizando ksoap2, utiliza la clase HttpTransportBasicAuth.

Pasa tus parámetros de la siguiente manera.

Asegúrate también de pasar la URL de enlace del servicio web de SAP (que puedes obtener del archivo WSDL).

Por ejemplo:

HttpTransportBasicAuth auth = new HttpTransportBasicAuth(url, usuario, contraseña);

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Naveen Raj, Haciendo lo que sugeriste y lanzando la misma excepción. ¿Hay algún dato de encabezado obligatorio que mencionar? Saludos, Jampana

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Venkat y Kaushal,

Por favor, consulta el siguiente código para acceder al servicio web de SAP desde Android.

final static String NAMESPACE = "urn:sap-com:document:sap:soap:functions:mc-style"; // Espacio de nombres del WSDL

final static String METHOD_NAME = "GetUser"; // Nombre de la operación desde el WSDL

final static String SOAP_ACTION = "NAMESPACE + METHOD_NAME";

final static String URL =" http://server:port/sap/bc/srt/rfc/sap/zget_user_dets/100/zsn_getuserdets/zbn_getuserdets "; // dirección del servidor

private static final String USERNAME = ""; // ID de usuario de inicio de sesión del servidor SAP

private static final String PASSWORD = ""; // Contraseña de inicio de sesión del servidor SAP

public void onCreate(Bundle savedInstanceState) {

/*** Lógica de la aplicación aquí *********/

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy);

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.setOutputSoapObject(request);

AuthTransportSE androidHttpTransport=null;

try{

androidHttpTransport = new AuthTransportSE(URL,USERNAME, PASSWORD);

androidHttpTransport.debug = true;

}

catch(Exception ex)

{

System.out.println("error: "+ex);

}

try {

androidHttpTransport.call(SOAP_ACTION, envelope);

SoapObject response = (SoapObject) envelope.bodyIn;

String uname = response.getPropertyAsString("Return1"); // Variable de exportación desde el módulo de función SAP

String pass = response.getPropertyAsString("Return2");

String lang = response.getPropertyAsString("Return3");

/********* Procesar la salida aquí *************/

}

catch (Exception e)

{

e.printStackTrace();

}

}

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Venkat, ¿Puedes asegurarte de que estás utilizando la URL DE ENLACE para llamar al Servicio (no la URL del WSDL)?

Puedes obtener la URL de Enlace de tu servicio desde el archivo WSDL.

El nombre de la etiqueta XML sería, <soap: address_location>.

Gracias.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?