Question

J'ai ma ressource et sa méthode surchargée typique pour traiter les requêtes POST.

public void acceptRepresentation(Representation rep) {

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

Ce que je veux savoir, c'est la meilleure pratique pour gérer mon paquet XML. Je vois beaucoup d'exemples utilisant un formulaire - mais il existe sûrement un moyen de travailler avec l'objet Représentation lui-même ou de le convertir en un objet XML utile ???

Toute aide sur la manière dont vous devriez et analysez l'analyse du XML entrant dans votre ressource est très appréciée.

Était-ce utile?

La solution

C’est plus le type de réponse que je recherchais. Merci à Thierry Boileau pour la réponse:

  

Vous pouvez utiliser deux types de & XML; XML   représentations " ;: DomRepresentation   et SaxReprésentation. Vous pouvez   instancier les deux avec le   représentation affichée. Par exemple.:   DomRepresentation xmlRep = new   DomRepresentation (rep);

     

DomRepresentation vous donne accès   au document Dom. le   SaxReprésentation vous permet d’analyser   le document XML avec le vôtre   contentHandler. Voir les javadocs ici   1 et ici 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.   

Autres conseils

Nous le faisons actuellement avec RESTeasy, qui est une implémentation alternative de JAX-RS. Nous utilisons des liaisons JAXB (annotations) pour établir une correspondance entre le XML et nos POJO modèles, et nous spécifions un fournisseur JAXB à JAX-RS afin qu’il sache comment procéder. Ceci est décrit dans notre RESTful services Web dans Java EE avec l'article RESTEasy (JAX-RS) , ce qui peut être utile.

Mise à jour: pour Restlet, le JAXB extension est peut-être ce dont vous avez besoin.

Grâce à la méthode representation.getText () , vous pouvez obtenir une chaîne pouvant être introduite dans un analyseur ou un lecteur dom. SAX.

@Simon E

Je ne comprends pas: quelle implémentation REST pour Java utilisez-vous?

Je vous donne donc un exemple d'utilisation de JAX-RS (implémentation de Jersey)

La partie serveur (méthode d'une 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();
}

Partie client (méthode de certains tests 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);
}

C'est ça !!!

Si vous rencontrez des problèmes lors de l'importation:
Le serveur nécessite javax.ws.rs. * Et javax.ws.rs.core. *
Le client a besoin de com.sun.jersey.api.client. * Et com.sun.jersey.api.representation. *

De toute façon, je vous conseillerais d'utiliser JAX-RS plutôt que implémentations alternatives, car JAX-RS fera partie de la Java EE 6

à venir

S'agit-il de la même procédure même dans Restlet 2.0?

J'utilise restlet 2.0m6 et voici l'extrait de code que j'utilise -

@Post

Processus de représentation publique (entité de représentation)

{

essayer

{

DomRepresentation dom = new DomRepresentation (entité);

Document d = dom.getDocument ();

.

.

} catch (exception e)

{e.printStackTrace (); }

et il lève une exception Null Pointer à la ligne dom.getDocument (). Ce qui signifie qu'aucune donnée n'est réellement arrivée.

Et mon bit flex ressemble à ceci - service var: HTTPService = new HTTPService (); service.method = " POST " ;; service.contentType = " application / xml " service.url = url; Variable: AsyncToken = service.send (paramètres);

où params est un objet XML.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top