Sobre formato de retorno de WebService

1 resposta
E

Pessoal,

preciso criar um WebService com alguns métodos que retornam dados de uma procedure de banco.

Basicamente meu retorno vai ser uma tabela de banco… com algumas dezenas ou centenas de registros.

Porém não estou retornando a tabela crua, mas fazendo algum processamento para jogar os dados de relacionamento 1->N em listas no meu objeto principal.

Um exemplo do que estou falando:

Existe a tabela Cliente e a tabela Carro.
Um cliente pode ter varios carros.

Eu poderia retornar no meu WebService os registros crus resultantes do Join entre as duas tabelas, porém estou montando o objeto Cliente que possui uma List de Carro.

Essa List de Carro não aparece na resposta SOAP, então eu transformei ela pra um array de String, e a resposta SOAP fica assim:

<return>
<nomeCliente>Manuel</nomeCliente>
<carro>Vectra</carro>
<carro>Golf</carro>
<carro>Corolla</carro>
</return>

Minha dúvida é a seguinte: Como eu estruturo melhor esse XML?

Gostaria que ficasse mais ou menos assim:

<return>
<nomeCliente>Manuel</nomeCliente>
<carro item="1">
    <nome>Vectra</nome>
    <ano>1999</ano>
</carro>
<carro item="2">
    <nome>Golf</nome>
    <ano>2010</ano>
</carro>
<carro item="3">
    <nome>Corolla</nome>
    <ano>2014</ano>
</carro>
</return>

É possível?

Obrigado!

1 Resposta

luiz_renato

Caro colega,

Seu XML está mal formado. Esse seria melhor :
&lt;cliente&gt;
    &lt;nomeCliente&gt;Manuel&lt;/nomeCliente&gt;
    &lt;carros&gt;
        &lt;carro item="1"&gt;
            &lt;nome&gt;Vectra&lt;/nome&gt;
            &lt;ano&gt;1999&lt;/ano&gt;
        &lt;/carro&gt;
        &lt;carro item="2"&gt;
            &lt;nome&gt;Golf&lt;/nome&gt;
            &lt;ano&gt;2010&lt;/ano&gt;
        &lt;/carro&gt;
        &lt;carro item="3"&gt;
            &lt;nome&gt;Corola&lt;/nome&gt;
            &lt;ano&gt;2014&lt;/ano&gt;
        &lt;/carro&gt;
    &lt;/carros&gt;
&lt;/cliente&gt;
Pra fazer isso vc pode usar:
@XmlAccessorType(XmlAccessType.FIELD)
public class Cliente {

	private String nomeCliente;
	
	@XmlElementWrapper
	@XmlElement(name="carro")
	private List&lt;Carro&gt; carros;


	public String getNomeCliente() {
		return nomeCliente;
	}


	public void setNomeCliente(String nomeCliente) {
		this.nomeCliente = nomeCliente;
	}


	public List&lt;Carro&gt; getCarros() {
		return carros;
	}


	public void setCarros(List&lt;Carro&gt; carros) {
		this.carros = carros;
	}

}
@XmlElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Carro {
	
	@XmlAttribute
	private int item;
	
	private String nome;
	
	private int ano;

	public int getItem() {
		return item;
	}

	public void setItem(int item) {
		this.item = item;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public int getAno() {
		return ano;
	}

	public void setAno(int ano) {
		this.ano = ano;
	}
}
Criado 30 de maio de 2014
Ultima resposta 16 de out. de 2014
Respostas 1
Participantes 2