Pergunta

Eu tenho o meu recurso e eles método substituído típico para lidar com solicitações POST.

public void acceptRepresentation(Representation rep) {

  if (MediaType.APPLICATION_XML.equals(rep.getMediaType())) {
      //Do stuff here
  }
  else {
      //complain!
  }
}

O que eu quero saber é a melhor prática para lidar com o meu pacote de XML. Eu vejo um monte de exemplos que usam um formulário - mas certamente há uma maneira de trabalhar com o próprio objeto de representação ou lançá-lo a algum objeto XML útil ???

Qualquer ajuda sobre como você deve e fazer XML de entrada de análise em seu recurso é muito apreciada.

Foi útil?

Solução

Este é mais o tipo de resposta que eu estava procurando. Graças à Thierry Boileau para a resposta:

Você pode usar dois tipos de "XML representações ": DomRepresentation e SaxRepresentation. Você pode instanciar ambos com o representação postada. Por exemplo.: DomRepresentation xmlRep = new DomRepresentation (rep);

O DomRepresentation lhe dá acesso ao documento Dom. o SaxRepresentation permite analisar o documento XML com seu próprio ContentHandler. Veja as javadocs aqui 1 e aqui 2.

  1. http://www.restlet.org/documentation/1.1/api/org/restlet/res ource / DomRepresentat ion.html

  2. http: //www.restlet.o rg / documentação / 1.1 / api / org / Restlet / res ource / SaxRepresentat ion.html

Outras dicas

No momento não fazer isso usando Resteasy, que é uma implementação alternativa JAX-RS. Usamos ligações JAXB (anotações) para mapear entre o XML e os nossos POJOs modelo e especifique um provedor de JAXB para JAX-RS para que ele saiba como. Isto é descrito em nosso RESTful serviços web em Java EE com RESTEasy (JAX-RS) artigo , o que pode ajudar.

Update: para Restlet, o JAXB extensão pode ser o que você precisa.

Através do método representation.getText(), você pode obter uma String que pode ser alimentado em um parser SAX ou leitor de dom.

@Simon E

Eu não entendo: qual implementação REST para Java você está usando

Então, eu apenas dar-lhe um exemplo de como usar JAX-RS (implementação Jersey)

A parte do servidor (método de alguma classe REST):

@POST
@Path("/upload")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)
public static Response upload(
        @FormParam("name") String name,
        @FormParam("content") String content)
        throws Exception {

    // NOTE: you get your content as String
    // (do something here)

    return Response.ok().build();
}

A parte cliente (método de algum teste JUnit):

@Test
public void uploadFile()
        throws Exception {

    String address = "http://0.0.0.0:8000/r/upload";

    WebResource r = Client.create().resource(address);
    Form form = new Form();
    form.add("name", "test");
    form.add("content", "SOME CONTENT GOES HERE");
    String s = r.post(String.class, form);

    System.out.println(s);
}

É isso aí !!!

No caso de você ter problemas com as importações:
Servidor precisa javax.ws.rs. * E javax.ws.rs.core. *
Cliente precisa com.sun.jersey.api.client. * E com.sun.jersey.api.representation. *

De qualquer maneira, eu iria dar-lhe o conselho para usar JAX-RS, em vez de implementações alternativas, porque JAX-RS farão parte do próximo Java EE 6

Este é o mesmo procedimento, mesmo em Restlet 2.0 ??

Eu uso 2.0m6 Restlet e aqui está o trecho de código que eu uso -

@Post

processo de representação pública (entidade Representação)

{

try

{

DomRepresentation dom = new DomRepresentation (entidade);

Documento d = dom.getDocument ();

.

.

} catch (Exception e)

{e.printStackTrace (); }

e lança uma exceção de ponteiro nulo na linha dom.getDocument (). O que significa que há dados realmente chegou.

E minha aparência bits flexíveis como este - serviço var: HTTPService = new HTTPService (); service.method = "POST"; service.contentType = "application / xml" service.url = url; var token: AsyncToken = service.send (params);

onde params é um objeto XML.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top