Dúvida em webservice

3 respostas
regisbten

Bom dia,

pessoal espero que consigam me ajudar, tenho um web service funcionando perfeito, porém o xml que ele
retorna nem todos ítens são obrigatórios, caso um atributo da consulta que é feita no banco esteja ‘null’, ele retorna o xml com a tag
“diferente” digamos assim.

Um exemplo do xml que ele retorna é:

<usuario> <nome>regis</nome> <login>resb</login> </usuario>

Digamos que o login não fosse obrigatório e esse usuário tivesse um login vazio o xml que retorna é:

<usuario> <nome>regis</nome> <login xsi:nil="1"/> </usuario>

Caso fosse vazio não teria como ao inves de

<login xsi:nil="1"/>

Retornasse:

<login></login>

Existe alguma configuração algo que possa ser colocado no WSDL que altere esse retorno?

Valeu espero que alguém possa ajudar…

3 Respostas

ivo_costa

Tu tem o código de geração do xml? Dá pra alterar direto no código ao invés de mecher no WDSL (nem sei o que é isso).

flw!

S

Então amigo. Há sim maneiras de que se retorne um XML somente com os campos que lhe interessar. Mas como você gerou esse XML ?
Aqui, eu uso o XSTREAM, com ele faço da seguinte maneira:

Annotations.configureAliases(xstream, NomeDaClasse.class);

Aqui, eu informo ao xstream onde estão os campos que ele vai usar para gerar o meu XML.

xstream.useAttributeFor(NomeDaClasse.class, "NomeDoCampo");

Aqui eu escolho qual é o atributo que vou usar, quero usar como um atributo, um campo espefíco da classe.

xstream.omitField(NomeDaClasse.class,"NomeDoCampo");

Aqui, eu escolho qual campo da minha classe vai ser omitido. Daí, o XML aparece sem ele.

@XStreamAlias("reg")
public class NomeDaSuaClasse implements Serializable {
	
	@XStreamAsAttribute@XStreamAlias("nomeDoSeuCampo")
	private Integer nomeDoSeuCampo; 
	
	@XStreamAsAttribute@XStreamAlias("nomeDoSeuCampo2")
	private Integer nomeDoSeuCampo2; 
        
       @XStreamOmitField
	private Integer nomeDoCampo3; 

       /* Seus Métodos Aqui */
	
}

Dessa Maneira a minha classe fica preparada pra ser lida pelo XSTREAM e me gerar o xml. Perceba que meu ultimo atributo será omitido quando o xml for gerado, mas isso não é uma boa prática, já que dessa forma, quando outra pessoa usar esse atributo, e precisar do campo, ele será omitido.

É claro que há mais maneiras de se fazer. Só estou mostrando como eu faço aqui.

Qualquer coisa, estamos ai.... Abraço :D

regisbten

Aqui gerei o webservice utilizando a ferramenta da apache, utilizei o AXIS, não escrevo diretamente o xml e nem
sempre esses campos serão omitidos pois se estiverem preenchidos vai aparecer.

Digamos que tenho um método que retorna um Object[].

Vou olhar as classes que o AXIS cria para ver se tem algo que eu possa tratar, alguém tem mais
alguma dica?

Desde ja obrigado pro pessoal ai de cima hehehe…

Criado 8 de abril de 2008
Ultima resposta 8 de abr. de 2008
Respostas 3
Participantes 3