Frage

Ich habe meine Ressource und sie typische überschriebene Methode zur POST-Anfragen bearbeiten.

public void acceptRepresentation(Representation rep) {

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

Was ich möchte wissen, ist die beste Praxis meines Paket von XML zu behandeln. Ich sehe eine Menge von Beispielen ein Formular verwenden - aber sicher gibt es einen Weg, sich mit der Vertretung Objekt zu arbeiten oder es einige nützliche XML-Objekt umgewandelt ???

Jede Hilfe, wie sollten Sie und eingehende XML Sie analysieren in Ihrer Ressource wird sehr geschätzt.

War es hilfreich?

Lösung

Dies ist eher die Art von Antwort, die ich suchte. Dank Thierry Boileau für die Antwort ein:

  

Sie können zwei Arten von „XML verwenden   Darstellungen ": DomRepresentation   und SaxRepresentation. Du kannst   instanziiert beide mit der   geschrieben Darstellung. Z.B.:   DomRepresentation xmlRep = new   DomRepresentation (rep);

     

Die DomRepresentation gibt Ihnen Zugang   zum Dom Dokument. Das   SaxRepresentation ermöglicht es Ihnen, zu analysieren   das XML-Dokument mit Ihrem eigenen   Content. Siehe die javadocs hier   1 und hier 2.

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

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

  4.   

Andere Tipps

Wir tun dies derzeit mit Resteasy, die eine Alternative JAX-RS-Implementierung ist. Wir verwenden JAXB Bindungen (Anmerkungen) zwischen dem XML und unser Modell POJOs auf der Karte, und geben Sie einen JAXB Anbieter zu JAX-RS, damit es weiß, wie. Dies ist in unserer RESTful rel="nofollow Web Services in Java EE mit Resteasy (JAX-RS) Artikel , die helfen können.

Update: für Restlet, die JAXB Erweiterung könnte sein, was Sie brauchen.

Durch die representation.getText() Methode können Sie einen String erhalten, die in einen SAX-Parser oder dom Leser zugeführt werden kann.

@ Simon E

Ich verstehe nicht: die REST-Implementierung für Java werden Sie mit

?

Also, ich gebe Ihnen nur ein Beispiel unter Verwendung von JAX-RS (Jersey-Implementierung)

Der Serverteil (Methode einiger REST-Klasse):

@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();
}

Der Client-Teil (Methode einiger JUnit-Test):

@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);
}

Das ist es !!!

Falls Sie Probleme mit Importen:
Server benötigt javax.ws.rs. * Und javax.ws.rs.core. *
Client benötigt com.sun.jersey.api.client. * Und com.sun.jersey.api.representation. *

Auf jeden Fall würde ich Ihnen den Rat JAX-RS zu verwenden, anstatt alternative Implementierungen, weil JAX-RS Teil der sein wird, kommender Java EE 6

Ist dies das gleiche Verfahren auch in Restlet 2.0 ??

Ich verwende Restlet 2.0m6 und hier ist der Code-Schnipsel, die ich verwende -

@Post

öffentliche Darstellung Prozess (Darstellung Einheit)

{

Versuch

{

DomRepresentation dom = new DomRepresentation (Einheit);

Dokument d = dom.getDocument ();

.

.

} catch (Exception e)

{e.printStackTrace (); }

und es wirft eine Null-Zeiger-Ausnahme an der dom.getDocument () Linie. Was bedeutet eigentlich kamen keine Daten vor.

Und meine flex Bit sieht wie folgt aus - var Service: Http = new Httpservice (); service.method = "POST"; service.contentType = "application / xml" service.url = url; var token: AsyncToken = service.send (params);

wo params ist ein XML-Objekt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top