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: http://soap.amazon.com/schemas2/AmazonWebServices.wsdl
Alguém sabe como fazer isso?
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
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?
[quote=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?
[/quote]
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.