Похоже, вам придется использовать MessageBodyReader
здесь. Вот пример использования 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
}
}
}
Добавьте этот класс в список ресурсов, которые будет обрабатывать развертывание вашего джерси (я думаю, что обычно это настраивается через web.xml). Затем вы можете использовать этот читатель в одном из ваших обычных классов ресурсов, например:
@Path("/somepath") @POST
public void handleXMLData(Document doc) {
// do something with the document
}
Я не проверял, что это работает точно так, как напечатано, но в этом суть. Больше чтения здесь: