Pregunta

Tengo mi recurso y su método típico anulado para manejar solicitudes POST.

public void acceptRepresentation(Representation rep) {

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

Lo que quiero saber es la mejor práctica para manejar mi paquete de XML. Veo muchos ejemplos usando un Formulario, pero seguramente hay una manera de trabajar con el objeto Representation en sí mismo o convertirlo en algún objeto XML útil ???

Se agradece cualquier ayuda sobre cómo debe analizar y analizar XML entrante en su recurso.

¿Fue útil?

Solución

Este es más el tipo de respuesta que estaba buscando. Gracias a Thierry Boileau por la respuesta:

  

Puede usar dos tipos de " XML   representaciones '': DomRepresentation   y SaxRepresentation. Usted puede   instanciar a ambos con el   Representación publicada. P.ej.:   DomRepresentation xmlRep = nuevo   DomRepresentation (rep);

     

La representación Dom le da acceso   al documento Dom. los   SaxRepresentation te permite analizar   el documento XML con el tuyo   contentHandler. Mira los javadocs aquí   1 y aquí 2.

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

  2.   
  3. http: //www.restlet.o rg / documentation / 1.1 / api / org / restlet / res ource / SaxRepresentat ion.html

  4.   

Otros consejos

Actualmente hacemos esto usando RESTeasy, que es una implementación alternativa de JAX-RS. Utilizamos enlaces JAXB (anotaciones) para mapear entre el XML y nuestros POJO modelo, y especificamos un proveedor JAXB a JAX-RS para que sepa cómo hacerlo. Esto se describe en nuestro RESTful Servicios web en Java EE con el artículo RESTEasy (JAX-RS) , que puede ayudar.

Actualización: para Restlet, el JAXB la extensión podría ser lo que necesita.

A través del método rendering.getText () , puede obtener una cadena que se puede alimentar a un analizador SAX o lector de dom.

@Simon E

No entiendo: ¿qué implementación REST para Java está utilizando?

Entonces, solo les doy un ejemplo del uso de JAX-RS (implementación de Jersey)

La parte del servidor (método de alguna clase 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();
}

La parte del cliente (método de alguna prueba 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);
}

¡Eso es todo!

En caso de que tenga problemas con las importaciones:
El servidor necesita javax.ws.rs. * Y javax.ws.rs.core. *
El cliente necesita com.sun.jersey.api.client. * Y com.sun.jersey.api.representation. *

De cualquier manera, te daría el consejo de usar JAX-RS en lugar de implementaciones alternativas, porque JAX-RS será parte de la próximo Java EE 6

¿Es este el mismo procedimiento incluso en restlet 2.0 ??

Uso restlet 2.0m6 y aquí está el fragmento de código que uso -

@Post

Proceso de representación pública (entidad de representación)

{

prueba

{

DomRepresentation dom = nueva DomRepresentation (entidad);

Documento d = dom.getDocument ();

.

.

} catch (Excepción e)

{e.printStackTrace (); }

y arroja una excepción de puntero nulo en la línea dom.getDocument (). Lo que significa que en realidad no llegaron datos.

Y mi bit flexible se ve así: servicio var: HTTPService = new HTTPService (); service.method = " POST " ;; service.contentType = " application / xml " service.url = url; token var: AsyncToken = service.send (params);

donde params es un objeto XML.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top