Domanda

Ho la mia risorsa e hanno il tipico metodo ignorato per gestire le richieste POST.

public void acceptRepresentation(Representation rep) {

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

Quello che voglio sapere è la migliore pratica per gestire il mio pacchetto di XML. Vedo molti esempi usando un modulo - ma sicuramente c'è un modo per lavorare con l'oggetto di rappresentazione stesso o lanciarlo su qualche utile oggetto XML ???

Qualsiasi aiuto su come dovresti e come analizzare XML in entrata nella tua risorsa è molto apprezzato.

È stato utile?

Soluzione

Questo è più il tipo di risposta che stavo cercando. Grazie a Thierry Boileau per la risposta:

  

Puoi utilizzare due tipi di " XML   rappresentazioni " ;: DomRepresentation   e SaxRepresentation. Puoi   istanziare entrambi con il   rappresentazione pubblicata. Per esempio.:   DomRepresentation xmlRep = new   DomRepresentation (rep);

     

DomRepresentation ti dà accesso   al documento Dom. Il   SaxRepresentation ti consente di analizzare   il documento XML con il tuo   contentHandler. Vedi i javadocs qui   1 e qui 2.

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

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

  4.   

Altri suggerimenti

Attualmente lo facciamo utilizzando RESTeasy, che è un'implementazione alternativa JAX-RS. Utilizziamo le associazioni (annotazioni) JAXB per mappare tra XML e POJO del nostro modello e specificiamo un provider JAXB su JAX-RS in modo che sappia come. Questo è descritto nel nostro RESTful servizi web in Java EE con l'articolo RESTEasy (JAX-RS) , che può aiutare.

Aggiornamento: per Restlet, il JAXB l'estensione potrebbe essere ciò di cui hai bisogno.

Tramite il metodo Representation.getText () , è possibile ottenere una stringa che può essere inserita in un parser SAX o in un lettore dom.

@Simon E

Non capisco: quale implementazione REST per Java stai usando?

Quindi, ti faccio solo un esempio dell'uso di JAX-RS (implementazione Jersey)

La parte del server (metodo di alcune classi 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 client (metodo di alcuni test 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);
}

Esatto !!!

In caso di problemi con le importazioni:
Il server richiede javax.ws.rs. * E javax.ws.rs.core. *
Il cliente ha bisogno di com.sun.jersey.api.client. * E com.sun.jersey.api.representation. *

In ogni caso, ti consiglierei di usare JAX-RS piuttosto che implementazioni alternative, perché JAX-RS farà parte del imminente Java EE 6

È la stessa procedura anche nel restlet 2.0 ??

Uso il restlet 2.0m6 ed ecco lo snippet di codice che utilizzo -

@Post

processo di rappresentanza pubblica (entità di rappresentanza)

{

try

{

DomRepresentation dom = new DomRepresentation (entità);

Documento d = dom.getDocument ();

.

.

} catch (Exception e)

{e.printStackTrace (); }

e genera un'eccezione Puntatore null sulla riga dom.getDocument (). Ciò significa che nessun dato è effettivamente arrivato.

E il mio bit flessibile è simile al seguente: var service: HTTPService = new HTTPService (); service.method = " POST " ;; service.contentType = " application / xml " service.url = url; token var: AsyncToken = service.send (params);

dove params è un oggetto XML.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top