In one of the few questions (with answers) Ho trovato su SO per quanto riguarda JAX-RS e la memorizzazione nella cache, la risposta alla generazione di ETags (per la memorizzazione nella cache) è impostando alcuni valori sull'oggetto Response. Come nella seguente:È possibile impostare ETags usando JAX-RS senza ricorrere agli oggetti Response?
@GET
@Path("/person/{id}")
public Response getPerson(@PathParam("id") String name, @Context Request request){
Person person = _dao.getPerson(name);
if (person == null) {
return Response.noContent().build();
}
EntityTag eTag = new EntityTag(person.getUUID() + "-" + person.getVersion());
CacheControl cc = new CacheControl();
cc.setMaxAge(600);
ResponseBuilder builder = request.evaluatePreconditions(person.getUpdated(), eTag);
if (builder == null) {
builder = Response.ok(person);
}
return builder.cacheControl(cc).lastModified(person.getUpdated()).build();
}
Il problema è che non funziona per noi, dato che usiamo gli stessi metodi sia per SOAP e REST servizi, annotando i metodi con @WebMethod (SOAP), @GET (e qualsiasi altra cosa potremmo aver bisogno di esporre il servizio). Il servizio precedente sarebbe simile a questa a noi (esclusa la creazione di intestazioni):
@WebMethod
@GET
@Path("/person/{id}")
public Person getPerson(@WebParam(name="id") @PathParam("id") String name){
return _dao.getPerson(name);
}
C'è un modo - attraverso qualche configurazione aggiuntiva - di impostare queste intestazioni? Questa è la prima volta che ho scoperto che l'utilizzo degli oggetti Response ha effettivamente dei vantaggi rispetto alla semplice conversione automatica ...
Stiamo usando Apache CXF.
Potrei usare qualche tipo di Intercettore? http://stackoverflow.com/questions/3165647/apache-cxf-how-to-add-custom-http-header-to-jax-rs-response?rq=1 – oligofren