Problema em retornar um bean no web service

8 respostas
gabi.linhares

Olá a todos,

estou desenvolvendo um web service que necessita retornar ou passar como parâmetro um Bean num de seus métodos. Infelizmente o wsdl não é gerado quando utilizo o bean como parâmetro no método ou tento usar o bean como retorno do mesmo.

Alguém já trabalhou com esse tipo de aplicação e teve esse problema?

Aqui vai a classe da qual eu gero o wsdl (aliás, q eu NÃO gero, pois dá erro por causa do bean!)

// imports

[i]public class Servico {

public boolean cadastrar( BeanVigencia bean ){
	
	boolean cadastro = true;
	
	try {
		NgcVigencia.getInstancia().cadastrar(bean);
			
	} catch (Exception e) {
		e.printStackTrace();
	}
	
	return cadastro;
}

}
[/i]

Desde já, agradeço qualquer esclarecimento :smiley:

8 Respostas

jgbt

qual erro que esta ocorrendo?

uma coisa que precisa ser feita é seus beans implementarem Serializable.

[]´s

gabi.linhares

Como eu estou usando o plugin do wtp no eclipse 3.2, ao tentar gerar o wsdl, acusa um erro de que a classe à qual eu relaciono o método não é encontrada e portanto o wsdl não pode ser gerado.

Como eu faço essa implementação do bean???

mchiareli

vc está tentando erar o cliente??

coloca esse bean no class path da sua aplicação client…

Pq vc nao usa um xml para reseprentar esse objeto…, se vc precisar chamar esse webservice a partir de clientes não java…

gabi.linhares

Sim, estou tanto gerando o próprio serviço como o seu cliente.
O que quero saber é como implementar no método o Bean para que seja possível gerar o wsdl, ou ainda, se devo fazer alguma alteração no próprio wsdl para que eu tenha que passar o Bean e não parâmetros de tipos primitivos.

O meu bean deve implementar a classe Serializable somente???

gabi.linhares

Beleza, implementei a classe Serializable no Bean e já consegui gerar o meu wsdl.
O serviço está funcionando perfeitamente.

Obrigada!

Agora e se eu tiver uma lista como parâmetro??

gabi.linhares

Por exemplo, meu método é assim:

public List listar( boolean listAll, HashMap parametros ){

// lógica…

}

Desse método, que retorna um List :frowning: vou gerar um serviço e depois o wsdl…
Na hora de gerar o wsdl dá erro.

Alguma sugestão???

Pedrosa

Como o amigo disse anteriormente você pode gerar um xml, por exemplo com o Xtream onde consegueria montar facilmente essa lista dentro do seu objeto e percorrer no cliente esse objeto que contém sua lista.

Xtream
http://xstream.codehaus.org/tutorial.html

Ex:

public class ClienteXpto {
	private List<Cliente> clientes;
	public List<Cliente> getClientes() {
		return clientes;
	}
	public void setClientes(List<Clientes> clientes) {
		this.clientes= clientes;
	}
	
}

Em qualquer lugar popularia esse objeto e transformaria em xml com o metodo toXml() do Xtream e transformaria de volta em objeto com o método fromXml().

Ex:

XStream xstream = new XStream();
xstream.alias("cliente", Cliente.class);
xstream.alias("clienteXpto", ClienteXpto.class);
List<Cliente> clientes = new ArrayList<Cliente>();

for (int i = 0; i < 10; i++) {
    Cliente cliente = new Cliente();
    cliente.setNome("aaaaa");
    cliente.setIdade("25");
    clientes.add(cliente)

}
String xml = "";
ClienteXpto clienteXpto = new ClienteXpto();
//populando o Objeto
clienteXpto.setClientes(clientes);
//transformando o objeto em xml
xml = xstream.toXML(clienteXpto);


//transformando em objeto de volta
ClienteXpto cli = (ClienteXpto) xstream.fromXML(xml);
for (Cliente clienteAtual : cli.getClientes()) {
     System.out.println(clienteAtual.getNome());
     System.out.println(clienteAtual.getIdade());

}

Ou seja você retorna uma String normal no formato de XML no server na publicação do serviço, e na hora de consumir no cliente converte em objeto.

jgbt

se vc vai ter clientes não java para seu WS não use Collection, use arrays, pq algumas linguagens não conseguem trabalhar com essa estrutura de dados.

[]´s

Criado 13 de dezembro de 2007
Ultima resposta 13 de dez. de 2007
Respostas 8
Participantes 4