@Override public ContainerResponse filter(ContainerRequest request, ContainerResponse response) { try { Object entity = response.getEntity(); if (entity != null) { if (entity instanceof TopicType) { // Note: type matches both, must take precedence over topic firePreSend((TopicType) entity); } else if (entity instanceof Topic) { firePreSend((Topic) entity); } else if (entity instanceof Association) { firePreSend((Association) entity); } else if (entity instanceof Directives) { firePreSend((Directives) entity); } else if (isIterable(response, TopicType.class)) { firePreSendTopicTypes(DeepaMehtaUtils.<Iterable<TopicType>>cast(entity)); } else if (isIterable(response, Topic.class)) { firePreSendTopics(DeepaMehtaUtils.<Iterable<Topic>>cast(entity)); } } return response; } catch (Exception e) { throw new WebApplicationException( new RuntimeException("Jersey response filtering failed", e)); } }
@Override public ContainerResponse filter(ContainerRequest req, ContainerResponse res) { Object entity = res.getEntity(); if (entity instanceof PaginatedIterable) { PaginatedIterable<?> p = (PaginatedIterable) entity; if (p.isPaginated()) { insertLinks(p, req, res); } } return res; }
private boolean isIterable(ContainerResponse response, Class<?> elementType) { Type genericType = response.getEntityType(); if (genericType instanceof ParameterizedType) { Type[] typeArgs = ((ParameterizedType) genericType).getActualTypeArguments(); Class<?> type = response.getEntity().getClass(); // FIX FOO CHECK THIS OUT!!!! if (typeArgs.length == 1 && Iterable.class.isAssignableFrom(type) && elementType.isAssignableFrom((Class<?>) typeArgs[0])) { return true; } } return false; }