Web Service Rest - Como criar o cabecalho xsi:schemaLocation?

3 respostas
albama

Bom dia estou estudando web service rest, gostaria de saber se é possivel incluir esse cabecalho,
como faço isso ?

<Carro xmlns="http://www.locadora.com.br/ajato/cic" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="http://www.locadora.com.br/ajato/cic ../../schema/cic/Carro1.0.xsd" versao="1.0">

3 Respostas

luiz_renato

Isso normalmente é definido no parse xml que vc usa - no JAXB algumas desses namespace são definidos em anotaçoes na classe ou métodos do Marshaller.

albama

Você tem algum exemplo usando Rest ?

luiz_renato

albama,

Até onde sei isso independe do webservice ser rest/soap pois vc define os namespace's nos objetos e no parser.
Se for o JAXB (trabalhoso por sinal) indico esses link's p/ vc ter uma idéia:
[url]http://www.vogella.com/articles/JAXB/article.html[/url]
[url]http://stackoverflow.com/questions/870691/jaxb-how-do-i-annotate-classes-so-that-they-belong-to-different-namespaces[/url]
[url]http://hwellmann.blogspot.com.br/2011/03/jaxb-marshalling-with-custom-namespace.html[/url]

Se for outro parser XStream dá uma pesquisada.
[url]http://stackoverflow.com/questions/8335970/namespace-qualified-attributes-with-xstream[/url]

Um exemplo:
package diversos.xml;

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement(namespace="http://www.locadora.com.br/ajato/cic")
@XmlType(propOrder={"descricao","preco","id"})
public class Produto {
	
	private int id;
	private String descricao;
	private double preco;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public double getPreco() {
		return preco;
	}
	public void setPreco(double preco) {
		this.preco = preco;
	}
}
public class ProdutoTeste {
      public static void main(String[]args) {
      JAXBContext context;
		try {
			Produto p = new Produto();
			p.setId(1);
			p.setDescricao("TV Alta definição");
			p.setPreco(1500);
			context = JAXBContext.newInstance(Produto.class);
			JAXBElement&lt;Produto&gt; element = new JAXBElement&lt;Produto&gt;(new QName("produto"), 
					Produto.class, p);
			Marshaller marshaller = context.createMarshaller();
			//propriedades de JAXB
			//JAXB_FORMATTED_OUTPUT - formatacao linhas uma debaixo da outra
			//JAXB_ENCODING - encoding
			//JAXB_FRAGMENT - retira a 1ª linha do xml
			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
			marshaller.setProperty(Marshaller.JAXB_ENCODING,"ISO-8859-1");
			marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
			ByteArrayOutputStream output = new ByteArrayOutputStream();
			marshaller.marshal(element, output);
			System.out.println(output);
		} catch (JAXBException e) {
			e.printStackTrace();
		}
}
Resultado:
&lt;produto xmlns:ns2="http://www.locadora.com.br/ajato/cic"&gt;
    &lt;descricao&gt;TV Alta definição&lt;/descricao&gt;
    &lt;preco&gt;1500.0&lt;/preco&gt;
    &lt;id&gt;1&lt;/id&gt;
&lt;/produto&gt;
Criado 17 de julho de 2012
Ultima resposta 17 de jul. de 2012
Respostas 3
Participantes 2