Collection em web service  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
obs
Thread.start()
[Avatar]

Membro desde: 13/04/2005 16:22:22
Mensagens: 40
Localização: Salvador/BA
Offline

Bom dia pessoal,

Eu estou com problema, qunado uso o apache Axis 1.4 para gerar wsdl;

O primeiro erro é o seguinte: eu tenho um atributo que é do tipo Character, mas esse tipo não está sendo gerado no wsdl. Ele diz que tipo não pode ser encontrado! e quando o tipo é Integer ele transforma para int.

obs.: para funcionar tive que mudar meus atributos de Character para String. Mas gostaria de usar Character e demais Wrapper classes!

O segundo erro e mais grave é: tenho tipos java.util.Collection como atributos, só que no wsdl fica como ArrayOf_xsd_anyType, e nas classes geradas pelo Axis isso passa a ser um array de objects (Object[]);


Alguem sabe como faz para consumir um web service de objetos complexo que contenha Collection (de preferência com Axis), sem que ela se transforme em objects[]? assim como Wrapper classes (Character)?

Obrigado,

Osmar Barreto

"Não se acostume com o que não o faz feliz,revolte-se quando julgar necessário.Alague seu coração de esperanças,mas não deixe que ele se afogue nelas."

Fernando Pessoa.

thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Evite usar Collection em web services. Em vez disso, use os arrays correspondentes, nem que você tenha de usar aquelas APIs da classe java.util.Arrays e java.util.Collections (que convertem Collections em arrays e vice-versa) para passar e receber os valores.

errado: Collection<SuaClasse> atributo
certo: SuaClasse[] atributo
[WWW]
Rafael Nunes
Moderador
[Avatar]

Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline

Por que disso, thingol?

------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."

http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
[Email]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Já vi muita gente perder sábados, domingos e feriados porque definiu parâmetros ou valores de retorno em Web Services dessa maneira.
Resumindo: até o Java 1.4, Collection é uma coleção de qualquer coisa, portanto só dá para efetuar uma "serialização" (modo de dizer) para Object. Depois do Java 1.4 dá para você fazer uma Collection de alguma coisa, mas acho que isso não foi propagado direito para o Web Services.
[WWW]
Rafael Nunes
Moderador
[Avatar]

Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline

Hun, tá certo.
Bregado.

------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."

http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
[Email]
obs
Thread.start()
[Avatar]

Membro desde: 13/04/2005 16:22:22
Mensagens: 40
Localização: Salvador/BA
Offline

Eu estou utilizando por exemplo uma classe Autor:


Nela eu tenho um Set de locks, pois essa classe é um DTO que mapeia meus HBMs (Hibernate)



Só que, quando eu gero o web service com o Axis, ele cria algumas classes tipo, stub, skeleton..etc e cria tb uma classe Autor e Lock, mas desse forma:



Então o que você sugere fazer? alterar o Set para Collections ou o Object[] locks para Collections?

Obrigado,

Osmar

"Não se acostume com o que não o faz feliz,revolte-se quando julgar necessário.Alague seu coração de esperanças,mas não deixe que ele se afogue nelas."

Fernando Pessoa.

thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Poderia ser algo como:

[WWW]
obs
Thread.start()
[Avatar]

Membro desde: 13/04/2005 16:22:22
Mensagens: 40
Localização: Salvador/BA
Offline

muito obrigado amigo!

vou fazer assim.

"Não se acostume com o que não o faz feliz,revolte-se quando julgar necessário.Alague seu coração de esperanças,mas não deixe que ele se afogue nelas."

Fernando Pessoa.

F3RP4
HelloWorld
[Avatar]

Membro desde: 17/07/2006 15:30:17
Mensagens: 14
Offline

Olá, posso dar uma sujestão...
Migra sua aplicação para JAX-WS, ele suporta Collections e tambem Generics, e a curva de aprendizado é bem baixa. Lá vai um exemplinho:

package org.me;

import java.util.List;
import java.util.ArrayList;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public class ExemploWS {
@WebMethod
public List<String> minhaLista() {
List<String> lista = new ArrayList<String>();
lista.add("Olá");
lista.add("GUJ");
return lista;
}
}

Depois disso é sow empacotar e deploy
Claro q o servidor deve dar suporte a JAX-WS (Glassfish, tomcat tbm da, mas tem q instalar...)
[MSN]
obs
Thread.start()
[Avatar]

Membro desde: 13/04/2005 16:22:22
Mensagens: 40
Localização: Salvador/BA
Offline

é muito bem vinda sua sugestão, pois eu estou ficando maluco com esse Axis. Trabalhar com array é loucura!

Tem como você me dizer do que eu preciso? Estou trabalhando com jboss 4.0.4 e jdk 1.5, hibernate 3.1 etc... o que mais eu preciso? Caso vc tenho algum tutorial tb agradeço.


valeu

Osmar

"Não se acostume com o que não o faz feliz,revolte-se quando julgar necessário.Alague seu coração de esperanças,mas não deixe que ele se afogue nelas."

Fernando Pessoa.

 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team