[RESOLVIDO] Consumir WebService .NET no JAVA ME.  XML
Índice dos Fóruns » Google Android e Java Micro Edition (ME)
Autor Mensagem
Cmcampos1986
Thread.start()
[Avatar]

Membro desde: 22/05/2011 10:43:00
Mensagens: 27
Offline

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"?>
-<ArrayOfString xmlns="http://tempuri.org/" xmlnssd="http://www.w3.org/2001/XMLSchema" xmlnssi="http://www.w3.org/2001/XMLSchema-instance">
<string>39</string>
<string>17</string>
<string>53</string>
<string>0</string>
<string>42</string>
<string>17</string>
<string>69</string>
<string>15</string>
<string>19</string>
</ArrayOfString>


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

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;
}


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!

This message was edited 1 time. Last update was at 09/06/2011 06:30:28

thiago.filadelfo
Virtual Machine Man
[Avatar]

Membro desde: 07/07/2007 00:32:26
Mensagens: 579
Localização: São Paulo
Offline

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

[Email] [MSN]
Cmcampos1986
Thread.start()
[Avatar]

Membro desde: 22/05/2011 10:43:00
Mensagens: 27
Offline

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!
renanpto
JavaEvangelist
[Avatar]

Membro desde: 16/04/2007 11:58:32
Mensagens: 458
Localização: Curitiba
Offline

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..

Sun Certified Java Programmer 5
Oracle Certified Web Component Developer 5
www.devlogic.com.br
[WWW] [MSN]
thiago.filadelfo
Virtual Machine Man
[Avatar]

Membro desde: 07/07/2007 00:32:26
Mensagens: 579
Localização: São Paulo
Offline

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

[Email] [MSN]
Cmcampos1986
Thread.start()
[Avatar]

Membro desde: 22/05/2011 10:43:00
Mensagens: 27
Offline

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:

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);
}


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?
thiago.filadelfo
Virtual Machine Man
[Avatar]

Membro desde: 07/07/2007 00:32:26
Mensagens: 579
Localização: São Paulo
Offline

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

[Email] [MSN]
Cmcampos1986
Thread.start()
[Avatar]

Membro desde: 22/05/2011 10:43:00
Mensagens: 27
Offline

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!

This message was edited 1 time. Last update was at 09/06/2011 06:30:06

fabiolira
Thread.start()

Membro desde: 10/10/2008 23:33:05
Mensagens: 37
Offline

Cmcampos1986 wrote: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:

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);
}


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?


Cara, tenho um problema parecido, meu Web Service é em .Net e a função retorna List<string>, 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???
Cmcampos1986
Thread.start()
[Avatar]

Membro desde: 22/05/2011 10:43:00
Mensagens: 27
Offline

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


RETORNAR



Agora eu só utilizo o KSOAP2!

Espero que tenha ajudado!


Cmcampos1986
Thread.start()
[Avatar]

Membro desde: 22/05/2011 10:43:00
Mensagens: 27
Offline

Haaaaaaaaa... declarei como global as variáveis:

fabiolira
Thread.start()

Membro desde: 10/10/2008 23:33:05
Mensagens: 37
Offline

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];
}
Cmcampos1986
Thread.start()
[Avatar]

Membro desde: 22/05/2011 10:43:00
Mensagens: 27
Offline

fabiolira, como você montou o tipo ArrayOfString?
fabiolira
Thread.start()

Membro desde: 10/10/2008 23:33:05
Mensagens: 37
Offline

Cmcampos1986 wrote:fabiolira, como você montou o tipo ArrayOfString?


ArrayOfString as = new ArrayOfString();
try {
//pego no web service
as = ws.retornaProduto();
}
catch (RemoteException e1) {
e1.printStackTrace();
}
//carrego num array de string
String[] reg = as.getString();

String datos = "";
for (int i=0; i<reg.length; i++) {
dados = dados + "," + reg[i];
}

This message was edited 1 time. Last update was at 07/08/2011 21:59:30

Cmcampos1986
Thread.start()
[Avatar]

Membro desde: 22/05/2011 10:43:00
Mensagens: 27
Offline

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?
 
Índice dos Fóruns » Google Android e Java Micro Edition (ME)
Ir para:   
Powered by JForum 2.1.8 © JForum Team