Retornar mais de um Objeto - WebService [Resolvido]

6 respostas
N

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

6 Respostas

vitenho

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

N

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:

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(p);
   return v;
}
N

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?

B

Utilize arrays simples ao invés de collections.

http://www.ibm.com/developerworks/webservices/library/ws-tip-coding.html

N

Fiz o teste utilizando arrays simples, essa é o método:

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

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

N

Consegui resolver, fiz da seguinte maneira no client (J2ME):

//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"));

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

Criado 29 de julho de 2009
Ultima resposta 30 de jul. de 2009
Respostas 6
Participantes 3