Sembra che dovresti usare uno MessageBodyReader
qui. Ecco un esempio, usando JDOM:
import org.jdom.Document;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ext.MediaType;
import javax.ws.rs.ext.MultivaluedMap;
import java.lang.reflect.Type;
import java.lang.annotation.Annotation;
import java.io.InputStream;
@Provider // this annotation is necessary!
@ConsumeMime("application/xml") // this is a hint to the system to only consume xml mime types
public class XMLMessageBodyReader implements MessageBodyReader<Document> {
private SAXBuilder builder = new SAXBuilder();
public boolean isReadable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) {
// check if we're requesting a jdom Document
return Document.class.isAssignableFrom(type);
}
public Document readFrom(Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, InputStream entityStream) {
try {
return builder.build(entityStream);
}
catch (Exception e) {
// handle error somehow
}
}
}
Aggiungi questa classe per l'elenco delle risorse distribuzione maglia elaborerà (di solito configurati via web.xml, credo). È quindi possibile utilizzare questo lettore in una delle classi di risorse regolari come questo:
@Path("/somepath") @POST
public void handleXMLData(Document doc) {
// do something with the document
}
non ho verificato che questo funziona esattamente come digitato, ma questo è l'essenza di esso. Più leggere qui:
Aggiunta di una @Consumes (MediaType.TEXT_PLAIN) era anche richiesto per me. –
Oppure direi qualcosa su, in generale? –
Ciò è estremamente utile per il debug dei messaggi in Jersey dove, per qualsiasi motivo, l'ispezione di rete non è un'opzione, ma le modifiche al codice sono (test di integrazione locale, nel mio caso). – Patrick