¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como consumir serviços web SOAP da SAP no Android: Código e solução para exceção no Logcat

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

Olá,

Quero consumir os serviços web SOAP da SAP no Android. Para isso, escrevi o seguinte 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 {

/** Chamado quando a atividade é criada pela primeira 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); // colocar todos os dados necessários em um 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("O resultado é "+result);

}

catch(SocketException ex){

ex.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

Mas ao executar o aplicativo no Android, recebo a seguinte exceção no Logcat do 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 (posição: START_TAG <{ http://schemas.xmlsoap.org/wsdl/ }wsdl:definitions targetNamespace='urn:sap-com:document:sap:soap:functions:mc-style'>@1:686 em 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, revise e me avise onde estou cometendo um erro no meu código.

Obrigado antecipadamente...

Venkat.A

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

4 Respuestas

0
Cargando...

Olá Venkat e Kaushal,

Para acessar o serviço web da SAP a partir do Android usando ksoap2, utilize a classe HttpTransportBasicAuth.

Passe seus parâmetros da seguinte maneira.

Certifique-se também de passar a URL de ligação do serviço web da SAP (que você pode obter do arquivo WSDL).

Por exemplo:

HttpTransportBasicAuth auth = new HttpTransportBasicAuth(url, usuário, senha);

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

Olá Naveen Raj, Fazendo o que sugeriu e lançando a mesma exceção. Há algum dado de cabeçalho obrigatório a mencionar? Saudações, Jampana

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

Olá Venkat e Kaushal,

Por favor, consulte o seguinte código para acessar o serviço web da SAP a partir do Android.

final static String NAMESPACE = "urn:sap-com:document:sap:soap:functions:mc-style"; // Espaço de nomes do WSDL

final static String METHOD_NAME = "GetUser"; // Nome da operação a partir do 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 "; // endereço do servidor

private static final String USERNAME = ""; // ID de usuário de login do servidor SAP

private static final String PASSWORD = ""; // Senha de login do servidor SAP

public void onCreate(Bundle savedInstanceState) {

/*** Lógica do aplicativo aqui *********/

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"); // Variável de exportação do módulo de função SAP

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

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

/********* Processar a saída aqui *************/

}

catch (Exception e)

{

e.printStackTrace();

}

}

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

Olá Venkat, você pode garantir que está usando a URL DE LINK para chamar o Serviço (não a URL do WSDL)?

Você pode obter a URL de Link do seu serviço a partir do arquivo WSDL.

O nome da tag XML seria, <soap: address_location>.

Obrigado.

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?