protected T get(URI uri) { ClientResponse response = ClientUtil.readEntity( uri, getHttpClient(), getResourceRepresentationType(), ClientResponse.class); if (logger.isDebugEnabled()) { logger.debug("Request Accept header: " + getResourceRepresentationType()); logger.debug("Response header: " + response.getType()); } final int status = response.getStatus(); if (followRedirectionEnabled && status == ClientResponse.Status.MOVED_PERMANENTLY.getStatusCode()) { final URI location = response.getLocation(); if (location != null) { this.thisResourceUri = location; this.absoluteThisResourceUri = generateAbsoluteUri(); return get(); } } if (followRedirectionEnabled && (status == ClientResponse.Status.FOUND.getStatusCode() || status == ClientResponse.Status.SEE_OTHER.getStatusCode())) { final URI location = response.getLocation(); if (location != null) { URI absolutionLocation = getHttpClient().getAbsoluteUri(location, getReferrerUri()); return get(absolutionLocation); } } if (status < 300 || (status == ClientResponse.Status.NOT_MODIFIED.getStatusCode())) { if (response.hasEntity() && response.getStatus() != ClientResponse.Status.NO_CONTENT.getStatusCode()) { lastReadStateOfEntity = response.getEntity(getEntityClass()); if (getClientUtil() != null) { try { getClientUtil().parseLinks(lastReadStateOfEntity, getRelatedResourceUris()); } catch (Exception ex) { logger.warn(ex.getMessage(), ex); } } if (invokeGet) { invokeGETOnNestedResources(); } } else { lastReadStateOfEntity = null; } getInvocationCount++; Map<String, Object> headers = new HashMap<String, Object>(); EntityTag tag = response.getEntityTag(); if (tag != null) { headers.put(HttpHeaders.ETAG, tag); } Date date = response.getLastModified(); if (date != null) { headers.put(HttpHeaders.LAST_MODIFIED, date); } cachedHeaders.put(uri.toString(), headers); return lastReadStateOfEntity; } throw new UniformInterfaceException(response); }