В один из немногих вопросов (с ответами). Я нашел в SO относительно JAX-RS и кеширования, ответ на создание ETags (для кэширования) установка некоторых значений объекта 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();
}
Проблема в том, что мы не будем работать, поскольку мы используем те же методы для SOAP и REST-сервисов, аннотируя методы с помощью @WebMethod (SOAP), @GET (и все, что нам может понадобиться, чтобы разоблачить сервис). Предыдущая служба будет выглядеть так (без создания заголовков):
@WebMethod
@GET
@Path("/person/{id}")
public Person getPerson(@WebParam(name="id") @PathParam("id") String name){
return _dao.getPerson(name);
}
Есть ли какой-либо способ - через некоторую дополнительную конфигурацию - установить эти заголовки? Это первый раз, когда я обнаружил, что использование объектов Response на самом деле имеет определенную выгоду от просто автоматического преобразования...
Мы используем Apache CXF.