| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2008 13:42:00
|
gilliard_santos
JavaGuru
![[Avatar]](/images/avatar/b14680dec683e744ada1f2fe08614086.jpg)
Membro desde: 02/09/2004 12:35:28
Mensagens: 236
Localização: Campo Grande, MS
Offline
|
Pessoal, estou usando o JAX-WS para publicar meus webservices e quando utilizo um tipo básico ou mesmo um bean da minha aplicação como tipo de retorno tudo funciona certo. No entanto quando tento retornar uma Coleção (ArrayList, HashMap...) eu recebo no meu cliente um objeto "empty".
Tem algum detalhe que eu preciso cuidar para fazer isso? No início pensei que fosse porque meu Map continha tipos complexos, mas usando diretamente os tipos complexos, sem estar numa coleção, funciona.
Deve ser coisa simples. Aguardo a ajuda de vocês.
Obrigado.
|
http://gilliard.eti.br |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2008 14:24:12
|
leonickel
JavaChild
Membro desde: 28/08/2007 19:51:12
Mensagens: 141
Localização: São Paulo - SP
Offline
|
gilliard_santos,
nao sei se te ajuda em algo, mas eu tive um problema parecido.
foi mais ou menos assim: no meu bean A eu tenho um ArrayList de um outro objeto meu(B), aí quando eu criava um método no meu ws para retornar este meu objeto A, ele nao vinha com a lista do meu objeto B. Para resolver isso, eu precisei colocar neste meu bean A um método set para esta minha lista, pois tinha apenas o set.
Aí com isso pude perceber q para que uma property apareça mapeada no meu ws, é necessário que ela tenha ambos os métodos get e set.
Nao sei se ajudo, mas c vc descobrir algo sobre este problema, posta aí pra gente ter uma idéia ......
[]''sss!!!!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2008 14:40:51
|
gilliard_santos
JavaGuru
![[Avatar]](/images/avatar/b14680dec683e744ada1f2fe08614086.jpg)
Membro desde: 02/09/2004 12:35:28
Mensagens: 236
Localização: Campo Grande, MS
Offline
|
Valeu leonickel. Vou testar isso amanha cedo quando estiver no serviço.
Mas se mais alguem tiver uma solução, ou entao puder comentar sobre como isso funciona exatamente eu agradeço.
|
http://gilliard.eti.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2008 15:59:14
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline
|
Ola!
Retorne Collection em vez das classes concretas, pois elas estão especificadas. As vezes quando voce retorna classe concreta ele trata como complex type e procura por todos os atributos não-transientes para transforma-los em XML. E advinha? Algumas colecoes alguns dos atributos sao transientes pois eles tem os metodos readObject e writeObject....
E ate onde eu sei, JAX-WS nao define suporte a MAP.
|
http://blog.caelum.com.br twitter: @paulo_caelum
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2008 16:00:46
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
Também é bom evitar o uso de coleções em web services, prefira usar arrays mesmo que são bem mais fáceis de serem "mapeados", especialmente pra outras linguagens de programação.
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2008 16:33:37
|
gilliard_santos
JavaGuru
![[Avatar]](/images/avatar/b14680dec683e744ada1f2fe08614086.jpg)
Membro desde: 02/09/2004 12:35:28
Mensagens: 236
Localização: Campo Grande, MS
Offline
|
Paulo, no início eu tentei utilizar Interface, mas me dava um erro dizendo que eu tinha que trabalhar com classes concretas senão o jaxb não conseguia fazer binding. E sobre o Map eu não sei, mas achei um cara que tinha o mesmo problema usando ArrayList, por exemplo.
E Maurício, valeu pelo toque, vou procurar utilizar da forma como voce disse.
Qual seria então a forma "correta" de se fazer isso? A maioria dos exemplos que encontro na net ou é solução específica de algum framework ou então só trabalha com string e int. Tem também alguns outros exemplos que ao meu ver pareceram muito complexos e pareceram nao combinar com a facilidade de criar um WS usando JavaEE 5. Como a aplicação que estou fazendo vai acabar servindo de referência para muitas outras, gostaria de algo bem simples como "para retornar coleção o procedimento é este..." (não preciso de nada muito diferente, só arroz com feijão mesmo).
Vocês teriam algum bom material de WS com JAX-WS 2 para indicar?
Obrigado novamente.
|
http://gilliard.eti.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2008 16:42:57
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
A melhor dica que eu posso dar é, não use coleções, especialmente se você está escrevendo web services que vão ser utilizados por outras aplicações em outras linguagens. A sua ferramenta de web services pode gerar um WSDL bizarro que ache que a coleção é na verdade um tipo complexo, o que não é nem um pouco interessante.
A melhor forma de lidar com essas coisas é trabalhar com arrays mesmo, porque qualquer ferramenta pé-de-chulé vai saber o que fazer com eles e lá do outro lado do web service ninguém precisa saber que você tá usando um ArrayList ou HashSet, o que eles querem são os dados.
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2008 17:09:48
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
De qualquer forma, é super-simples retornar um Objeto[] em vez de um List<Objeto>; basta usar o método toArray.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2008 17:16:48
|
gilliard_santos
JavaGuru
![[Avatar]](/images/avatar/b14680dec683e744ada1f2fe08614086.jpg)
Membro desde: 02/09/2004 12:35:28
Mensagens: 236
Localização: Campo Grande, MS
Offline
|
Valeu Maurício! Passei a retornar um Array e funcionou. Ao mesmo tempo que eu eliminei o problema, deixei o serviço melhor de usar em outras linguagens. É que eu estava usando o mesmo método para disponibilizar o serviço via EJB e WS. Agora vou fazer um para cada tecnologia e deve ficar melhor. Obrigado a todos!
|
http://gilliard.eti.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2008 17:30:58
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline
|
Maurício Linhares wrote:A melhor dica que eu posso dar é, não use coleções, especialmente se você está escrevendo web services que vão ser utilizados por outras aplicações em outras linguagens. A sua ferramenta de web services pode gerar um WSDL bizarro que ache que a coleção é na verdade um tipo complexo, o que não é nem um pouco interessante.
A melhor forma de lidar com essas coisas é trabalhar com arrays mesmo, porque qualquer ferramenta pé-de-chulé vai saber o que fazer com eles e lá do outro lado do web service ninguém precisa saber que você tá usando um ArrayList ou HashSet, o que eles querem são os dados.
Mauricio! sua ferramenta que nao esta fazendo o trabalho direito. Nao va se adaptar a um framework, ele que deveria ja ter sido feito pensando em voce! Uma boa implementacao de JavaWS vai mapear Collection para array. Voce nao precisa usar uma array java para isso....
Do outro lado ele vai trabalahr com o que a linguagem dele mapear Collection!
thingol! denovo o seu framework que ta forçando a voce a trabalhar com Object[] em vez de List...
|
http://blog.caelum.com.br twitter: @paulo_caelum
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2008 17:36:00
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
Paulo Silveira wrote:Mauricio! sua ferramenta que nao esta fazendo o trabalho direito. Nao va se adaptar a um framework, ele que deveria ja ter sido feito pensando em voce! Uma boa implementacao de JavaWS vai mapear Collection para array. Voce nao precisa usar uma array java para isso....
Paulo, já tive problemas o suficiente com ferramentas que não sabiam mapear collections (e isso não é nem um problema só delas, até porque não dá pra saber o tipo da coleção sem genéricos e mesmo com genéricos isso não é trivial) ou com clientes de web services que não sabiam ler os WSDLs gerados, usar um array nesse caso não mata ninguém e ainda simplifica a interoperabilidade, não custa nada ajudar as ferramentas ou cuidar pra que elas tenham que adivinhar o mínimo possível.
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2008 17:57:04
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline
|
Mauricio, eu entendo voce... a gente as vezes quer se precaver em relacao as ferramentas malucas que tem por ai. mas o default do jaxb é transformar List em uma tag que tem maxOccurs="unbounded"... isso deveria sempre funcionar. Um JAX-WS que nao esta fazendo isso me parece estranho... gilliard, voce poderia me passar o codigo fonte da sua interface que recebia Collection para eu testar?
|
http://blog.caelum.com.br twitter: @paulo_caelum
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2008 18:13:24
|
gilliard_santos
JavaGuru
![[Avatar]](/images/avatar/b14680dec683e744ada1f2fe08614086.jpg)
Membro desde: 02/09/2004 12:35:28
Mensagens: 236
Localização: Campo Grande, MS
Offline
|
Paulo, era aproximadamente isso
Interface
Implementacao (apenas para testar)
Obrigado pelos toques
|
http://gilliard.eti.br |
|
|
 |
|
|