Web Service Com Protheus Pacote Soap Formato Desconhecido

Amigos, estou com um problema, Estou usando o eclipse para desenvolvimento android, estou passando as inforações do webservice do Protheus 10, porem ele me retorna essa mensagem de erro

'WEBSERVICE ERROR : Soap Prefix Missing : CRDLOGIN : SESSIONLOGIN : Formato do Pacote Soap DESCONHECIDO.

Alguem sabe o que pode ser??

segue abaixo meu código android:

private static final String METHOD_cliente = “SESSIONLOGIN”;
private static final String NAMESPACE = “http://webservices.microsiga.com.br/”;
private static final String URL = “http://webservices.microsiga.com.br/CRDLOGIN.apw”;
private static final String SOAP_ACTION_cliente = “http://webservices.microsiga.com.br/SESSIONLOGIN”;

SoapObject requisicao = new SoapObject(NAMESPACE, METHOD_cliente);
requisicao.addProperty(“Number”, status);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); // Cria o envelope;
envelope.dotNet = true;
envelope.setOutputSoapObject("");
HttpTransportSE http = new HttpTransportSE(URL);
http.call(SOAP_ACTION_cliente, envelope);
Log.i(“teste”," 1- ");
SoapObject s =(SoapObject)envelope.getResponse(); ////////Mostra o erro nessa linha////////////////

Na ultima linha e me mostra uma excpetion, alguém pode me ajudar, já procurei em quase todos os lugares e não achei a resposta!!! [u]

Abs,
Ronaldo Abreu

Olá… a um tempo atrás estava brincando com android e segui alguns exemplo da net ai… e funcionou… vou postar o código, espero que seja útil.
No mais antes de tudo, tenta comentar a linha "envelope.dotNet = true; " e testa novamente…

[code]package com.webservice.client;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class AndroidWSClient extends Activity {

private static final String NAMESPACE = "http://sum_number/";
private static String URL = "http://192.168.1.52:8080/HelloWebService/SumNumbersWSImpl?wsdl";
private static final String METHOD_NAME = "sum";
private static final String SOAP_ACTION = "http://sum_number/sum";

private TextView lblResult;

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

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

	SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

	
	PropertyInfo pi1 = new PropertyInfo();
    pi1.setName("number1");
    pi1.setValue(2L);
    pi1.setType(Long.class);
    request.addProperty(pi1);
	
	
	PropertyInfo pi2 = new PropertyInfo();
    pi2.setName("number2");
    pi2.setValue(5L);
    pi2.setType(Long.class);
    request.addProperty(pi2);
    
	SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

	envelope.setOutputSoapObject(request);
	//HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
	AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);
	
	try {
		androidHttpTransport.call(SOAP_ACTION, envelope);

		 SoapObject response = (SoapObject)envelope.getResponse();

		lblResult.setText(response.getProperty(0).toString());

	} catch (Exception e) {

	}

}

}[/code]

Abraço!

OPa,

Entao cara fiz igual vc informou, ficando assim:

private static final String METHOD_cliente 	      = "SESSIONLOGIN";
private static final String NAMESPACE 	 	      = "http://webservices.microsiga.com.br/";

private static final String URL = “http://webservices.microsiga.com.br/CRDLOGIN.apw?WSDL”; ///////?WSDL nao estava
private static final String SOAP_ACTION_cliente = “http://webservices.microsiga.com.br/”;

SoapObject requisicao = new SoapObject(NAMESPACE, METHOD_cliente);

PropertyInfo pi1 = new PropertyInfo();
pi1.setName(“Number1”);
pi1.setValue(2L);
pi1.setType(Long.class);
requisicao.addProperty(pi1);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(requisicao);
AndroidHttpTransport http = new AndroidHttpTransport(URL); /////Esse cara fica com risco preto nele antes do http;
http.call(SOAP_ACTION_cliente, envelope); ////agora ele ta parando aqui mostrando o erro abaixo:

09-13 14:17:04.247: INFO/teste(734): erro: org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG @10:97 in java.io.InputStreamReader@44c3c780)

/////Esse webservice da microsiga está no ar…se alguem quiser testa-lo//////////////

Att,
Ronaldo Abreu

AndroidHttpTransport http = new AndroidHttpTransport(URL); /////Esse cara fica com risco preto nele antes do http; é porque tá deprecated rsrs, mas quebra o galho…
private static final String URL = “http://webservices.microsiga.com.br/CRDLOGIN.apw?WSDL”; ///////?WSDL nao estava --> deixa como tava remove o ?WSDL .

Cara estou em casa e nao tenho como testar… mas assim que tiver um tempinho eu tento testar. Eu não estou mais mexendo muito com o android… Mas web service
no android é muito custoso em termos de processamento… pelo que até onde vi… e tambem achei meio complicado…

Boa Sorte… se conseguir testar e funcionar te repondo por aqui mesmo.
abraço!

OK, realmente permanece o erro

09-13 14:35:27.167: INFO/teste(822): erro: SoapFault - faultcode: ‘Sender’ faultstring: ‘WEBSERVICE ERROR : Soap Prefix Missing : RETORNA_STRING : RETORNA_STRING_TESTE : Formato do Pacote Soap DESCONHECIDO.’ faultactor: ‘null’ detail: null

O código ficou assim:
private static final String METHOD_cliente = “RETORNA_STRING_TESTE”;
private static final String NAMESPACE = “http://172.27.72.188/RETORNA_STRING.apw/”;
private static final String URL = “http://172.27.72.188/RETORNA_STRING.apw”;
private static final String SOAP_ACTION_cliente = “http://172.27.72.188/RETORNA_STRING.apw/RETORNA_STRING_TESTE”;

SoapObject requisicao = new SoapObject(NAMESPACE, METHOD_cliente);

PropertyInfo pi1 = new PropertyInfo();
pi1.setName(“Number1”);
pi1.setValue(2L);
pi1.setType(Long.class);
requisicao.addProperty(pi1);

  SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
  envelope.setOutputSoapObject(requisicao);  
  AndroidHttpTransport  http = new AndroidHttpTransport(URL);

http.call(SOAP_ACTION_cliente, envelope);
Log.i(“teste”," 1- ");
SoapObject s =(SoapObject)envelope.getResponse(); //////Para aqui;

Att,
Ronaldo Abreu;

Qual a melhor versão do Ksoap?

Eu estou usando a 2.5.7

Se não me engano essa que to usando é a 2.4

Mudei para o 2.4 apresentou esse erro:

09-13 14:51:06.548: INFO/teste(966): erro: org.xmlpull.v1.XmlPullParserException: expected: END_TAG {http://schemas.xmlsoap.org/soap/envelope/}Body (position:END_TAG </{http://schemas.xmlsoap.org/soap/envelope/}SOAP-ENV:Fault>@1:471 in java.io.InputStreamReader@44de0bc8)

após isso coloquei o ?wsdl e me apresentou outro erro:

09-13 14:51:42.468: INFO/teste(995): erro: org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG @10:97 in java.io.InputStreamReader@44de0ea0)

È cara realmente tá complicado… eu nao possuo muito conhecimento no android pra te ajudar…
quando tava brincando com as Web Services no Android eu segui esses exemplos: http://www.codeproject.com/KB/android/webservice-from-android.aspx
http://www.ibm.com/developerworks/webservices/library/ws-android/index.html

Rsrsrssss. é deve ser uma coisa besta que estou errando, esses dois já dei uma olhada e parece estar tudo certo…

Bom, vlw mesmo assim cara…obrigado pela força

Di Nada cara… abraço!
Bos Sorte :smiley:

se vc colocar assim

String s = (String) envelope.getResponse();

será que resolveria seu problema? Geralmente quando utilizo comunicação com webservice, faço desta forma.

Nao funcionou, já tentei, a nao ser que estou fazendo outra coisa de errado!!

Mas eu optei por outra solução pois eu nao sei que tipo de objeto está vindo do microsiga, então eu fiz um intermediario entre o android e o microsiga, fiz um webservice em c# onde converte os dados vindo do microsiga em Array[] e mando pro android, funcionou que uma beleza, sei que não é a melhor pratica mas foi a solução…

pq vem um objeto de qualquer tipo, e no c# tem uma variavel generics que resolve qualquer problema -> var

Bom se alguem tiver outra solução é bem vinda…

Abs
ROnaldo Abreu