WebService retornando Collection

4 respostas
R

Olá pessoal,
estou começando a desenvolver um WebService e tenho a seguinte situação:
preciso disponibilizar um método que busque no banco de dados uma dada sql e retorne essa lista de objetos vindas do banco.

Estou tendo dificuldades de retornar tipos complexos, o wsdl nao mapeia essa lista mesmo usando generics, por exemplo:

@WebService()

public class BuscaPessoasWS {

List output;

@WebMethod(operationName = getListaPessoas)

@SuppressWarnings(unchecked)

public List getListaPessoas() throws RemoteException{

try{

listaPessoas = null;

BusinessDelegateImpl businessDelegate = new BusinessDelegateImpl();

GenericReportFacade genericFacade = businessDelegate.getGenericReportFacade();

String sql = new String();

sql = SELECT * FROM Pessoas;

listaPessoas = genericFacade.makeQuery(sql);

}catch(Exception ex){

System.out.println("Exceção: "+ex);

}

return listaPessoas;

}

Esse wsdl do amazon tem Collections mapeados no wsdl, como vcs podem ver em:

<a href="http://soap.amazon.com/schemas2/AmazonWebServices.wsdl" class="onebox" target="_blank">http://soap.amazon.com/schemas2/AmazonWebServices.wsdl</a>

Alguém sabe como fazer isso?

Desde já agradeço!

4 Respostas

P

Cara, eu tbm estou com esse mesmo problema, entao passei a retornar Pessoa[] e ai ele mapeou normalmente…

sergiotaborda

Vc de deve usar arrays já que as classes de coleção não são inter-plataforma. Lembre-se que webservices podem ser acessados por linguagens e plataformas que vc nem imagina que existem então tem que usar o denominador comum. coleções como arrays, numeros como int, palavras como String

R

Mais uma pergunta de iniciante,
nesse caso em que o WebMethod retorna uma Pessoa[], quem for criar o client não vai ter que criar uma classe Pessoa do outro lado?
Não seria mais correto retornar uma matriz de Strings por exemplo? Para que fique mais independente a aplicação cliente do webservice?

Outra pergunta,
tem alguma maneira de invocar o método WebService via browser, utilizando Jboss 4.2, passando os parâmetros por get, assim não precisaria criar um cliente para testar a aplicação.

No glassfish tem como testar o WS através do browser colocando ?Tester.
Tem algo parecido no Jboss?

Desde já muito obrigado.

sergiotaborda

rro:
Mais uma pergunta de iniciante,
nesse caso em que o WebMethod retorna uma Pessoa[], quem for criar o client não vai ter que criar uma classe Pessoa do outro lado?
Não seria mais correto retornar uma matriz de Strings por exemplo? Para que fique mais independente a aplicação cliente do webservice?

Se a classe pessoa já faz parte do contrato do WS nada mais natural que retornar um array de Pessoa.
Retornar uma matriz de string é péssima ideia.

Veja, a limitação em usar collection é que ela faz parte do dominio do java. PHP , .NET etc… não terão essa classe.
Então, usar array, neste caso é para isolar as tecnologias ( que aliás é um dos objetivos do WS para começo de conversa).

A classe Pessoa é uma classe do dominio do problema em que o WS se insere. Ela não é de uma tecnologia. Ela é do dominio.
E por isso ela deve ser usada ao invez de um matriz de string. É uma questão semântica.

Quanto a isso não lhe sei dizer.

Criado 14 de dezembro de 2009
Ultima resposta 15 de dez. de 2009
Respostas 4
Participantes 3