[RESOLVIDO] Consumir WebService .NET no JAVA ME

Caros… bom dia!
Comecei a usar a pouco tempo o J2ME com NetBeans e me deparei com um erro que não consigo desvendar.
Vamos a ele!

Fiz um Web Service em .NET com apenas um método que retorna 9 códigos de acordo com uma procedure que eu defini para buscar o resultado.
O XML gerado, me retorna:

<?xml version="1.0" encoding="UTF-8"?>
-
39
17
53
0
42
17
69
15
19

Feito isso, criei a codificação no NetBeans que é executada uma tarefa no final da tela waitscreen:

[b]public SimpleCancellableTask getTask() {
if (task == null) {
// write pre-init user code here
task = new SimpleCancellableTask();
task.setExecutable(new org.netbeans.microedition.util.Executable() {
public void execute() throws Exception {
// write task-execution user code here
try
{
String namespace = “http://tempuri.org/SelecionarChamados”;
String url_ws = “http://localhost:2925/Service_Chamados.asmx”;
String method =“SelecionarChamados”;

                    SoapObject request = new SoapObject(namespace, method);

                    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

                    envelope.dotNet = true;
                    envelope.setOutputSoapObject(request);

                    //Web method call
                    HttpTransport HttpTransport = new HttpTransport(url_ws);
                    HttpTransport.call(namespace, envelope);

                    //get the response
                    Object result = (Object) envelope.getResponse();

                    String res = result.toString();
                   
                    TextBox tb = getTextBox();

                    for (int i=0; i< res.length();i++)
                    {

                        tb.insert(res.toCharArray(), i);
                        
                    }
                }
                catch(Exception e)
                {
                    e.getMessage();
                }
            }                                    
        });                                  
        // write post-init user code here
    }                         
    return task;
}[/b]

Estou com dificuldade de mostrar os resultados obtidos do XML, e o erro acontece justamente nessa parte.
A idéia principal é mostar no Textbox esses 9 números através de um array (acredito que seja pelo array pois construi com um array de String o método do Web Service).
Como é a primeira vez que eu desenvolvo em JAVA, estou com essa dificuldade.
Se for possível, gostaria da colaboração de vocês para me auxiliarem nesse caso.

Obrigado pela atenção!

Olá

Talvez esse tutorial possa ajudar.
Veja a parte final dele - Acessando o Web Service via J2ME

http://javafree.uol.com.br/artigo/871485/

Espero ter ajudado
Flwss

Muito obrigado thiago.filadelfo!

Vou ler este artigo que você me mandou e adequar a minha necessidade.
Caso eu tenha dúvidas, volto a escrever!

Eu já implementei um WebService .Net e o acessando pelo Jme.
Lembro que criava os stubs pelo proprio SDK do JME e importava para minha app. Era super tranquilo.
Boa sorte…

Olá renanpto

Tem sim essa opção de gerar pelo WTK, mas depende do celular ter a JSR 181 implementada.

Para os celulares que não tenham a implementam desta JSR, usamos o Ksoap e Kxml, ou senão fazemos um.

Flwsss

Bom dia!

Consegui fazer extamente o que eu queria e agora o resultado está sendo mostrado, porém gostaria de tirar mais uma dúvida que eu acredito que seja bem simples.

Tenho este trecho aqui:

[b]SoapObject result = (SoapObject) envelope.getResponse();

TextBox tb = getTextBox();
String res = result.getProperty(0).toString();

for (int i=0; i< res.length();i++)
{
tb.insert(result.getProperty(i).toString(), 0);
}[/b]

A parte do for… mais específico o tb.insert(result.getProperty(i).toString(), 0);, me retorna o resultado:

2164344216534221554452153517213337521331313101949

Sendo que eu preciso fazer uma quebra de linha para que ele fique dessa forma:

2164344
2165342
2155445
2153517
2133375
2133131
3101949

Qual seria a forma mais fácil de fazer essa quebra?

Olá

Você está enviando no webservice tudo junto?
Caso sim, poderia colocar um caracter que possa ser um identificado para suas quebras.

Quando realizava uma transferencia de dados servidor ao celular ou celular ao servidor, usava XML ou Json.
Creio que possa ajudar para a comunicação das partes.

Espero ter ajudado
Flwss

Consegui cara… fiz isso aqui:

tb.insert(result.getProperty(i).toString() + “\r\n”, 0);

Só adicionei o “\r\n” e ele quebrou certinho!

Mais uma vez muito obrigado!

[quote=Cmcampos1986]Bom dia!

Consegui fazer extamente o que eu queria e agora o resultado está sendo mostrado, porém gostaria de tirar mais uma dúvida que eu acredito que seja bem simples.

Tenho este trecho aqui:

[b]SoapObject result = (SoapObject) envelope.getResponse();

TextBox tb = getTextBox();
String res = result.getProperty(0).toString();

for (int i=0; i< res.length();i++)
{
tb.insert(result.getProperty(i).toString(), 0);
}[/b]

A parte do for… mais específico o tb.insert(result.getProperty(i).toString(), 0);, me retorna o resultado:

2164344216534221554452153517213337521331313101949

Sendo que eu preciso fazer uma quebra de linha para que ele fique dessa forma:

2164344
2165342
2155445
2153517
2133375
2133131
3101949

Qual seria a forma mais fácil de fazer essa quebra?[/quote]

Cara, tenho um problema parecido, meu Web Service é em .Net e a função retorna List, quando gero o Stub pelo WTK o tipo do valor do resultado vira ArrayOfString e não sei ler esse cara na aplicação.
Vc alterou o tipo de dados do resultado da função do Web Service??? se sim, para qual???

Bom dia fabiolira!

Então cara… no meu caso foi assim…

Eu tinha dois cenário:

Stubs (Adicionando um cliente Web Service)
KSOAP (Adicionando as bibliotecas e declarando a necessárias através da cláusula import)

Meu Web Service em .NET tem dois métodos simples: Um de selecionar e o outro de inserir.

Usando o Stub, o de inserir funcionou sem problemas, mas quando eu utilizei o de selecionar, não consegui fazer retornar também. Debuguei e vi que os índices são gerados de uma forma que eu nunca tinha visto. Tentei muitas vezes fazer retorná-lo mas não consegui.

Dessa forma, parti para o KSOAP2 e consegui tanto retornar como inserir.

INSERIR

[code]public SimpleCancellableTask getTskEnviar() {
if (tskEnviar == null) {
// write pre-init user code here
tskEnviar = new SimpleCancellableTask();
tskEnviar.setExecutable(new org.netbeans.microedition.util.Executable() {
public void execute() throws Exception {
// write task-execution user code here
try{

                    String metodo ="CadastrarTeste";
                    String soap_action = "http://tempuri.org/CadastrarTeste";

                    String _nome = txtNome.getString();
                    String _telefone = txtTelefone.getString();
                    String _altura = txtAltura.getString();
                    String _peso = txtPeso.getString();

                    SoapObject requisicao = new SoapObject(namespace, metodo); // Cria um SoapObject passando os parâmetros;

                    requisicao.addProperty("nom_usur", _nome); // Adiciona o valor do primeiro parâmetro do web service
                    requisicao.addProperty("tel_usur", _telefone); // Adiciona o valor do segundo parâmetro do web service
                    requisicao.addProperty("alt_usur", _altura); // Adiciona o valor do terceiro parâmetro do web service
                    requisicao.addProperty("pes_usur", _peso); // Adiciona o valor do quarto parâmetro do web service

                    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); // Cria o envelope;

                    envelope.dotNet = true; // Especifica que o web service utilizado é um .NET;
                    envelope.setOutputSoapObject(requisicao); // Envia a requisição ao web service;

                    HttpTransport HttpTransport = new HttpTransport(url); // Cria a comunicação com o local do web service;

                    HttpTransport.call(soap_action, envelope); // Chama o web service passando o nome do NAMESPACE da aplicação ASP.NET mais o nome do metódo e o envelope;
                }
                catch(Exception e)
                {
                    e.getMessage();
                }
            }                                    
        });                                  
        // write post-init user code here
    }                         
    return tskEnviar;
}[/code]

RETORNAR

[code]public SimpleCancellableTask getTskConsumir2() {
if (tskConsumir2 == null) {
// write pre-init user code here
tskConsumir2 = new SimpleCancellableTask();
tskConsumir2.setExecutable(new org.netbeans.microedition.util.Executable() {
public void execute() throws Exception {
// write task-execution user code here
try{

                    String metodo ="SelecionarTeste"; // Método Web Service
                    String soap_action = "http://tempuri.org/SelecionarTeste"; // Soap_Action Selecionar do Web Service

                    SoapObject request = new SoapObject(namespace, metodo); // Cria um SoapObject passando os parâmetros;
                    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); // Cria o envelope;

                    envelope.dotNet = true; // Especifica que o web service utilizado é um .NET;
                    envelope.setOutputSoapObject(request); // Envia a requisição ao web service;

                    HttpTransport HttpTransport = new HttpTransport(url); // Cria a comunicação com o local do web service;
                    HttpTransport.call(soap_action, envelope); // Chama o web service passando o nome do NAMESPACE da aplicação ASP.NET mais o nome do metódo e o envelope;

                    SoapObject result = (SoapObject) envelope.getResponse(); //Obtenho resposta do envelope

                    ChoiceGroup chConsumir = getChgConsumir(); //Declaração do ChoiceGroup

                    for (int i=0; i<= result.getPropertyCount();i++)
                    {
                        chConsumir.append(result.getProperty(i).toString(), null); //Retonando resultados no ChoiceGroup
                    }
                }
                catch(Exception e)
                {
                    e.getMessage();
                }
            }                                    
        });                                  
        // write post-init user code here
    }                         
    return tskConsumir2;
}[/code]

Agora eu só utilizo o KSOAP2!

Espero que tenha ajudado!

Haaaaaaaaa… declarei como global as variáveis:

String namespace = "http://tempuri.org/"; // Namespace Web Service String url = "http://localhost:2925/Service_Chamados.asmx"; // Url Web Service

Cmcampos1986,

muito obrigado pela atenção dispensada, mas consegui resolver, segue a forma que consegui.

ArrayOfString as = new ArrayOfString();
try {
as = ws.retornaProduto();
} catch (RemoteException e1) {
e1.printStackTrace();
}
String[] reg = as.getString();
String datos = “”;
for (int i=0; i<reg.length; i++) {
dados = dados + “,” + reg[i];
}

fabiolira, como você montou o tipo ArrayOfString?

ArrayOfString as = new ArrayOfString();
try {
[color=red]//pego no web service
as = ws.retornaProduto(); [/color]}
catch (RemoteException e1) {
e1.printStackTrace();
}
[color=red]//carrego num array de string
String[] reg = as.getString(); [/color]
String datos = “”;
for (int i=0; i<reg.length; i++) {
dados = dados + “,” + reg[i];
}

A codificação eu entendi, é que na verdade eu instanciei ArrayOfString as = new ArrayOfString(); e o Netbeans não reconheceu.
ArrayOfString é uma classe que vc declarou?

[quote=Cmcampos1986]A codificação eu entendi, é que na verdade eu instanciei ArrayOfString as = new ArrayOfString(); e o Netbeans não reconheceu.
ArrayOfString é uma classe que vc declarou?[/quote]

Não, quando gerei o Stub pelo WTK do Web Service ele criou essa classe.