Nairon
Julho 29, 2009, 2:41pm
#1
Boa Tarde!
Criei um WebService e o seu retorno no browser está assim:
<return type="Pessoa">
<nome>Maria</nome>
<idade>20</idade>
</return>
<return type="Pessoa">
<nome>João</nome>
<idade>25</idade>
</return>
Ou seja, me retorna dois objetos.
O problema é que no cliente consigo receber somente o primeiro, o segundo eu não consigo, há uma maneira de acessar o segundo ?
Obrigado
cara vc tem que envolver esses objetos num list of elements da uma olhada nas annotations do jaxb
esse eh um otimo tutorial
http://www.vogella.de/articles/JavaXML/article.html
valeu
Nairon
Julho 30, 2009, 8:38am
#3
Retornei em um Vector e o retorno fica assim:
<item0 xmlns="" type="Pessoa">
<nome>Maria</nome>
<idade>20</idade>
</item0>
<item0 xmlns="" type="Pessoa">
<nome>João</nome>
<idade>25</idade>
</item0>
Neste caso continua retornando somente o primeiro objeto (Maria), qual estrutura posso utilizar para que ele me retorne todos os objetos?
A classe do WebService é essa:
[code]public Vector getPessoa(){
Vector v = new Vector();
Pessoa[] p = new Pessoa[2];
p[0].setNome(“Maria”);
p[0].setIdade(“20”);
p[1].setNome(“João”);
p[1].setIdade(“25”);
v.addElement§;
return v;
}[/code]
Nairon
Julho 30, 2009, 9:37am
#4
Tentei retornar em um List e também em um ArrayList e o retorno é o mesmo, só consigo pegar no cliente o primeiro elemento. Como faço pra pegar todos os elementos no primeiro return?
bKn
Julho 30, 2009, 9:42am
#5
Nairon
Julho 30, 2009, 12:09pm
#6
Fiz o teste utilizando arrays simples, essa é o método:
[code]public Pessoa[] getPessoa(){
Pessoa[] p = new Pessoa[2];
p[0].setNome(“Maria”);
p[0].setIdade(“20”);
p[1].setNome(“João”);
p[1].setIdade(“25”);
return v;
} [/code]
No browser o retorno é esse:
<return type="webservice.Pessoa">
<nome>Maria</nome>
<idade>20</idade>
</return>
<return type="webservice.Pessoa">
<nome>João</nome>
<idade>25</idade>
</return>
Na aplicação cliente continua do mesmo jeito, somente retorna o primeiro
Nairon
Julho 30, 2009, 1:34pm
#7
Consegui resolver, fiz da seguinte maneira no client (J2ME):
[code]
//recebe os dados
SoapObject body = (SoapObject)envelope.bodyIn;
//pega o primeiro objeto
SoapObject result = (SoapObject)body.getProperty(0);
//pega o segundo objeto
SoapObject result1 = (SoapObject)body.getProperty(1);
//imprime o nome do primeiro retorno
System.out.println(result.getProperty(“nome”));
//imprime o nome do segundo retorno
System.out.println(result1.getProperty(“nome”));[/code]
A partir daí é só transformar os result’s em objetos pegando o campo através do getProperty.
Agradeço a ajuda e fica então o tópico com a resolução para quem passar pelo mesmo problema.
Valeu