Java 类javax.ws.rs.core.EntityTag 实例源码

项目:outland    文件:OpenApiDiscoveryResource.java   
private Response cacheAwareResponse(
    Request request, String entity, EntityTag etag, Date lastModified, int maxAge
) {

  final Response.ResponseBuilder builderLastMod = request.evaluatePreconditions(lastModified);
  if (builderLastMod != null) {
    return builderLastMod.build();
  }

  final Response.ResponseBuilder builderEtag = request.evaluatePreconditions(etag);
  if (builderEtag != null) {
    return builderEtag.build();
  }

  final CacheControl cc = new CacheControl();
  cc.setMaxAge(maxAge);

  return Response.ok(entity)
      .tag(etag)
      .lastModified(lastModified)
      .cacheControl(cc)
      .build();
}
项目:mycore    文件:MCRViewerResource.java   
@GET
@Path("{derivate}{path: (/[^?#]*)?}")
public Response show(@Context HttpServletRequest request, @Context Request jaxReq,
    @Context ServletContext context, @Context ServletConfig config) throws Exception {
    MCRContent content = getContent(request);
    String contentETag = content.getETag();
    Response.ResponseBuilder responseBuilder = null;
    EntityTag eTag = contentETag == null ? null : new EntityTag(contentETag);
    if (eTag != null) {
        responseBuilder = jaxReq.evaluatePreconditions(eTag);
    }
    if (responseBuilder == null) {
        responseBuilder = Response.ok(content.asByteArray(), MediaType.valueOf(content.getMimeType()));
    }
    if (eTag != null) {
        responseBuilder.tag(eTag);
    }
    if (content.isUsingSession()) {
        CacheControl cc = new CacheControl();
        cc.setPrivate(true);
        cc.setMaxAge(0);
        cc.setMustRevalidate(true);
        responseBuilder.cacheControl(cc);
    }
    return responseBuilder.build();
}
项目:emodb    文件:FaviconResource.java   
@GET
public Response get(@HeaderParam(HttpHeaders.IF_NONE_MATCH) String ifNoneMatch,
                    @HeaderParam(HttpHeaders.IF_MODIFIED_SINCE) Date ifModifiedSince) {
    // Check the ETags to see if the resource has changed...
    if (ifNoneMatch != null) {
        for (String eTag : ETAG_SPLITTER.split(ifNoneMatch)) {
            if ("*".equals(eTag) || ETAG.equals(EntityTag.valueOf(eTag))) {
                return NOT_MODIFIED;
            }
        }
    }

    // Check the last modification time
    if (ifModifiedSince != null && ifModifiedSince.after(LAST_MODIFIED)) {
        return NOT_MODIFIED;
    }

    return Response.ok().lastModified(LAST_MODIFIED).tag(ETAG).type(CONTENT_TYPE).entity(FAVICON).build();
}
项目:microbule    文件:ContainerCacheFilter.java   
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {

    final EntityTag entityTag = getEntityTag(responseContext);
    final Date lastModified = getLastModified(responseContext);

    responseContext.getHeaders().putSingle(HttpHeaders.CACHE_CONTROL, cacheControl);
    writeHeader(responseContext, HttpHeaders.ETAG, entityTag);
    writeHeader(responseContext, HttpHeaders.LAST_MODIFIED, lastModified == null ? null : HttpUtils.getHttpDateFormat().format(lastModified));

    final Response.ResponseBuilder builder = evaluatePreconditions(requestContext, entityTag, lastModified);
    if (builder != null) {
        responseContext.setStatusInfo(Response.Status.NO_CONTENT);
        responseContext.setEntity(null);
    }
}
项目:resteasy-examples    文件:CustomerResourceTest.java   
@Test
public void testCustomerResource() throws Exception
{
   WebTarget customerTarget = client.target("http://localhost:8080/services/customers/1");
   Response response = customerTarget.request().get();
   Assert.assertEquals(200, response.getStatus());
   Customer cust = response.readEntity(Customer.class);

   EntityTag etag = response.getEntityTag();
   response.close();

   System.out.println("Doing a conditional GET with ETag: " + etag.toString());
   response = customerTarget.request()
                            .header("If-None-Match", etag).get();
   Assert.assertEquals(304, response.getStatus());
   response.close();

   // Update and send a bad etag with conditional PUT
   cust.setCity("Bedford");
   response = customerTarget.request()
           .header("If-Match", "JUNK")
           .put(Entity.xml(cust));
   Assert.assertEquals(412, response.getStatus());
   response.close();
}
项目:FinanceAnalytics    文件:WebRegionVersionResource.java   
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getJSON(@Context Request request) {
  EntityTag etag = new EntityTag(data().getVersioned().getUniqueId().toString());
  ResponseBuilder builder = request.evaluatePreconditions(etag);
  if (builder != null) {
    return builder.build();
  }
  RegionSearchRequest search = new RegionSearchRequest();
  search.setPagingRequest(PagingRequest.ALL);  // may need to add paging
  search.setChildrenOfId(data().getVersioned().getUniqueId());
  RegionSearchResult children = data().getRegionMaster().search(search);
  data().setRegionChildren(children.getDocuments());

  for (UniqueId parentId : data().getRegion().getRegion().getParentRegionIds()) {
    RegionDocument parent = data().getRegionMaster().get(parentId);
    data().getRegionParents().add(parent);
  }

  FlexiBean out = createRootData();
  String json = getFreemarker().build(JSON_DIR + "region.ftl", out);
  return Response.ok(json).tag(etag).build();
}
项目:FinanceAnalytics    文件:WebConfigResource.java   
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getJSON(@Context final Request request) {
  final EntityTag etag = new EntityTag(data().getConfig().getUniqueId().toString());
  final ResponseBuilder builder = request.evaluatePreconditions(etag);
  if (builder != null) {
    return builder.build();
  }
  final FlexiBean out = createRootData();
  final ConfigDocument doc = data().getConfig();
  final String jsonConfig = StringUtils.stripToNull(toJSON(doc.getConfig().getValue(), doc.getType()));
  if (jsonConfig != null) {
    out.put("configJSON", jsonConfig);
  }
  out.put(CONFIG_XML, StringEscapeUtils.escapeJava(createBeanXML(doc.getConfig().getValue())));
  out.put("type", doc.getType().getSimpleName());
  final String json = getFreemarker().build(JSON_DIR + "config.ftl", out);
  return Response.ok(json).tag(etag).build();
}
项目:FinanceAnalytics    文件:WebConfigVersionResource.java   
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getJSON(@Context Request request) {
  EntityTag etag = new EntityTag(data().getVersioned().getUniqueId().toString());
  ResponseBuilder builder = request.evaluatePreconditions(etag);
  if (builder != null) {
    return builder.build();
  }
  FlexiBean out = createRootData();
  ConfigDocument doc = data().getVersioned();
  String jsonConfig = toJSON(doc.getConfig().getValue());
  if (jsonConfig != null) {
    out.put("configJSON", jsonConfig);
  } else {
    out.put(CONFIG_XML, StringEscapeUtils.escapeJavaScript(createBeanXML(doc.getConfig().getValue())));
  }
  out.put("type", data().getTypeMap().inverse().get(doc.getType()));
  String json = getFreemarker().build(JSON_DIR + "config.ftl", out);
  return Response.ok(json).tag(etag).build();
}
项目:omakase    文件:StatusResourceTest.java   
@Test
public void shouldGetStatusResponseEtag() {
    ZonedDateTime now = ZonedDateTime.now();
    doReturn(Optional.of(Job.Builder.build(job -> {
        job.setId("123");
        job.setStatus(JobStatus.EXECUTING);
        job.setStatusTimestamp(Date.from(now.toInstant()));
    }))).when(mockJobManager).getJob("123");

    EntityTag entityTag = EntityTagGenerator.entityTagFromLong(now.toInstant().toEpochMilli());

            doReturn(Response.notModified(entityTag)).when(mockRequest).evaluatePreconditions(any(EntityTag.class));
    Response response = statusResource.getStatus("123");
    assertThat(response.getStatus()).isEqualTo(304);
    assertThat(response.getEntity()).isNull();
    assertThat(response.getEntityTag()).isEqualToComparingFieldByField(entityTag);
}
项目:fcrepo-java-client    文件:FcrepoClientIT.java   
@Test
public void testPatchEtagUpdated() throws Exception {
    // Create object
    final FcrepoResponse createResp = create();
    final EntityTag createdEtag = EntityTag.valueOf(createResp.getHeaderValue(ETAG));

    final InputStream body = new ByteArrayInputStream(sparqlUpdate.getBytes());

    // Update triples with sparql update
    final FcrepoResponse response = client.patch(url)
            .body(body)
            .ifMatch("\"" + createdEtag.getValue() + "\"")
            .perform();

    final EntityTag updateEtag = EntityTag.valueOf(response.getHeaderValue(ETAG));

    assertEquals(NO_CONTENT.getStatusCode(), response.getStatusCode());
    assertNotEquals("Etag did not change after patch", createdEtag, updateEtag);
}
项目:Processor    文件:Item.java   
@Override
   public Response put(Model model)
   {
Model existing = getGraphStore().getModel(getURI().toString());

if (!existing.isEmpty()) // remove existing representation
{
    EntityTag entityTag = new EntityTag(Long.toHexString(ModelUtils.hashModel(model)));
    ResponseBuilder rb = getRequest().evaluatePreconditions(entityTag);
    if (rb != null)
    {
    if (log.isDebugEnabled()) log.debug("PUT preconditions were not met for resource: {} with entity tag: {}", this, entityTag);
    return rb.build();
    }
       }

       if (log.isDebugEnabled()) log.debug("PUT GRAPH {} to GraphStore {}", getURI(), getGraphStore());
       getGraphStore().put(model, Boolean.FALSE, getURI());

if (existing.isEmpty()) return Response.created(getURI()).build();        
       else return Response.ok(model).build();
   }
项目:jaxrs-analyzer    文件:TestClass22.java   
@javax.ws.rs.GET public Response method() {
    Response.ResponseBuilder responseBuilder = Response.ok();
    responseBuilder.header("X-Test", "Hello");
    responseBuilder.cacheControl(CacheControl.valueOf(""));
    responseBuilder.contentLocation(URI.create(""));
    responseBuilder.cookie();
    responseBuilder.entity(12d);
    responseBuilder.expires(new Date());
    responseBuilder.language(Locale.ENGLISH);
    responseBuilder.encoding("UTF-8");
    responseBuilder.lastModified(new Date());
    responseBuilder.link(URI.create(""), "rel");
    responseBuilder.location(URI.create(""));
    responseBuilder.status(433);
    responseBuilder.tag(new EntityTag(""));
    responseBuilder.type(MediaType.APPLICATION_JSON_TYPE);
    responseBuilder.variants(new LinkedList<>());

    return responseBuilder.build();
}
项目:jaxrs-static-resource-sample    文件:StaticResourcesTest.java   
/**
 * if-none-matchヘッダで転送量削減
 * 
 * @throws Exception
 */
@Test
public void testIfNoneMatch() throws Exception {

    //ハッシュファイルはGradleタスクで書き出すのでIDEでテスト実行
    //するとハッシュファイルが出来なくてアレなのでassume使っとく
    URL resource = getClass().getResource("/static/hello.txt.md5");
    Assume.assumeThat(resource, is(not(nullValue())));

    Response response = target("static/hello.txt").request().get();
    assertThat("Status code", response.getStatusInfo(), is(Status.OK));

    EntityTag eTag = response.getEntityTag();
    assertThat("ETag", eTag, is(not(nullValue())));

    Response response2 = target("static/hello.txt").request()
            .header(HttpHeaders.IF_NONE_MATCH, eTag).get();
    assertThat("Status code", response2.getStatusInfo(),
            is(Status.NOT_MODIFIED));

    assertThat("Count", counter.getCount(), is(2));
}
项目:che    文件:ETagResponseFilterTest.java   
/** Check if ETag is generated for a list of JSON */
@Test
public void filterListEntityTest() throws Exception {

  final ContainerResponse response =
      resourceLauncher.service(
          HttpMethod.GET, SERVICE_PATH + "/list", BASE_URI, null, null, null);
  assertEquals(response.getStatus(), OK.getStatusCode());
  // check entity
  Assert.assertEquals(response.getEntity(), Arrays.asList("a", "b", "c"));
  // Check etag
  List<Object> headerTags = response.getHttpHeaders().get("ETag");
  Assert.assertNotNull(headerTags);
  Assert.assertEquals(headerTags.size(), 1);
  Assert.assertEquals(headerTags.get(0), new EntityTag("900150983cd24fb0d6963f7d28e17f72"));
}
项目:che    文件:ETagResponseFilterTest.java   
/** Check if ETag is added in response if we're also using a custom header */
@Test
public void useExistingHeaders() throws Exception {

  final ContainerResponse response =
      resourceLauncher.service(
          HttpMethod.GET, SERVICE_PATH + "/modify", BASE_URI, null, null, null);
  assertEquals(response.getStatus(), OK.getStatusCode());
  // check entity
  Assert.assertEquals(response.getEntity(), "helloContent");

  // headers = 2
  Assert.assertEquals(response.getHttpHeaders().keySet().size(), 3);

  // Check custom header
  List<Object> customTags = response.getHttpHeaders().get(HttpHeaders.CONTENT_DISPOSITION);
  Assert.assertNotNull(customTags);
  Assert.assertEquals(customTags.size(), 1);
  Assert.assertEquals(customTags.get(0), "attachment; filename=my.json");

  // Check etag
  List<Object> headerTags = response.getHttpHeaders().get("ETag");
  Assert.assertNotNull(headerTags);
  Assert.assertEquals(headerTags.get(0), new EntityTag("77e671575d94cfd400ed26c5ef08e0fd"));
}
项目:che    文件:ETagResponseFilterTest.java   
/** Check if ETag is generated for a simple entity of JSON */
@Test
public void filterSingleEntityTest() throws Exception {

  final ContainerResponse response =
      resourceLauncher.service(
          HttpMethod.GET, SERVICE_PATH + "/single", BASE_URI, null, null, null);
  assertEquals(response.getStatus(), OK.getStatusCode());
  // check entity
  Assert.assertEquals(response.getEntity(), "hello");
  // Check etag
  List<Object> headerTags = response.getHttpHeaders().get("ETag");
  Assert.assertNotNull(headerTags);
  Assert.assertEquals(headerTags.size(), 1);
  Assert.assertEquals(headerTags.get(0), new EntityTag("5d41402abc4b2a76b9719d911017c592"));
}
项目:che    文件:ETagResponseFilterTest.java   
/** Check if ETag sent with header is redirecting to NOT_MODIFIED */
@Test
public void filterListEntityTestWithEtag() throws Exception {

  Map<String, List<String>> headers = new HashMap<>();
  headers.put(
      "If-None-Match",
      Collections.singletonList(new EntityTag("900150983cd24fb0d6963f7d28e17f72").toString()));

  final ContainerResponse response =
      resourceLauncher.service(
          HttpMethod.GET, SERVICE_PATH + "/list", BASE_URI, headers, null, null);
  assertEquals(response.getStatus(), NOT_MODIFIED.getStatusCode());
  // check null body
  Assert.assertNull(response.getEntity());
}
项目:che    文件:ETagResponseFilterTest.java   
/** Check if ETag sent with header is redirecting to NOT_MODIFIED */
@Test
public void filterSingleEntityTestWithEtag() throws Exception {

  Map<String, List<String>> headers = new HashMap<>();
  headers.put(
      "If-None-Match",
      Collections.singletonList(new EntityTag("5d41402abc4b2a76b9719d911017c592").toString()));

  final ContainerResponse response =
      resourceLauncher.service(
          HttpMethod.GET, SERVICE_PATH + "/single", BASE_URI, headers, null, null);
  assertEquals(response.getStatus(), NOT_MODIFIED.getStatusCode());
  // check null body
  Assert.assertNull(response.getEntity());
}
项目:dropwizard-webjars-bundle    文件:WebJarServlet.java   
private static String etag2hash(String etag) {
  String hash;

  try {
    hash = EntityTag.valueOf(etag).getValue();
  } catch (Exception e) {
    return null;
  }

  // Jetty insists on adding a -gzip suffix to ETags sometimes.  If it's there, then strip it off.
  if (hash.endsWith("-gzip")) {
    hash = hash.substring(0, hash.length() - 5);
  }

  return hash;
}
项目:restful-tutorial-qconsp2014    文件:PugResource.java   
@GET
@Path("{id}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response getPugBy( @PathParam("id") String id,
                          @Context Request request ) {
    Pug pug = PugsRepository.findById( id );
    if ( pug == null ) {
        return Response.status( 404 ).build();
    }

    //etag for this resource
    EntityTag etag = new EntityTag( Integer.toString( pug.hashCode() ) );

    //evaluate cache
    Response.ResponseBuilder builder = request.evaluatePreconditions( etag );

    // cached resource did change -> serve updated content
    if ( builder == null ) {
        builder = Response.ok( pug );
        builder.tag( etag );
    }
    return builder.build();
}
项目:restful-tutorial-qconsp2014    文件:PugResource.java   
@PUT
@Path("{id}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Consumes(MediaType.APPLICATION_JSON)
public Response createOrUpdatePug( @PathParam("id") String id,
                                   Pug pug,
                                   @Context Request request ) throws URISyntaxException {

    Pug actualPug = PugsRepository.findById( id );
    Response.ResponseBuilder builder = null;
    if ( putIsAUpdate( actualPug ) ) {
        EntityTag etag = new EntityTag( Integer.toString( actualPug.hashCode() ) );
        builder = request.evaluatePreconditions( etag );
        // client is not up to date (send back 412)
        if ( builder != null ) {
            return builder.build();
        }
        PugsRepository.update( pug );
    } else {
        PugsRepository.create(id, pug );
    }
    builder = Response.created( new URI( "/pugs/" + id ) );
    return builder.build();
}
项目:restful-tutorial-qconsp2014    文件:PugsResourceTest.java   
@Test
public void conditionalPut() throws URISyntaxException {
    Pug originalPug = new Pug( 1, "Dorinha", 10, new URI( "http://api.puglovers.com/pugs/1" ), new URI( "http://api.puglovers.com/pics/1" ) );
    Response responsePut = target.path( "pugs/1" ).request().put( Entity.json( originalPug ) );
    assertEquals( 201, responsePut.getStatus() );

    Response response200 = target.path( "pugs/1" ).request().accept( MediaType.APPLICATION_JSON ).get();
    EntityTag originalTag = response200.getEntityTag();
    assertEquals( 200, response200.getStatus() );

    //another concurrent request with right tag
    Pug concurrentPug = new Pug( 1, "Slim Dorinha", 11, new URI( "http://api.puglovers.com/pugs/1" ), new URI( "http://api.puglovers.com/pic/1" ) );
    Response responsePutSlim = target.path( "pugs/1" ).request().header( "If-Match", originalTag ).put( Entity.json( concurrentPug ) );
    assertEquals( 201, responsePutSlim.getStatus() );

    Response responseNewPug = target.path( "pugs/1" ).request().accept( MediaType.APPLICATION_JSON ).get();
    EntityTag newTag = responseNewPug.getEntityTag();
    assertEquals( 200, responseNewPug.getStatus() );

    //update with the first version
    //Only perform the action if the client supplied entity matches the same entity on server
    originalPug.setPeso( 1 );
    Response response412 = target.path( "pugs/1" ).request().header( "If-Match", originalTag ).put( Entity.json( originalPug ) );
    assertEquals( 412, response412.getStatus() );
}
项目:syncope    文件:AddETagFilter.java   
@Override
public void filter(final ContainerRequestContext reqCtx, final ContainerResponseContext resCtx) throws IOException {
    if (resCtx.getEntityTag() == null) {
        AbstractAnnotatedBean annotated = null;
        if (resCtx.getEntity() instanceof AbstractAnnotatedBean) {
            annotated = (AbstractAnnotatedBean) resCtx.getEntity();
        } else if (resCtx.getEntity() instanceof ProvisioningResult) {
            EntityTO entity = ((ProvisioningResult<?>) resCtx.getEntity()).getEntity();
            if (entity instanceof AbstractAnnotatedBean) {
                annotated = (AbstractAnnotatedBean) entity;
            }
        }
        if (annotated != null) {
            String etagValue = annotated.getETagValue();
            if (StringUtils.isNotBlank(etagValue)) {
                resCtx.getHeaders().add(HttpHeaders.ETAG, new EntityTag(etagValue).toString());
            }
        }
    }
}
项目:syncope    文件:AddETagFilter.java   
@Override
public void filter(final ContainerRequestContext reqCtx, final ContainerResponseContext resCtx) throws IOException {
    if (resCtx.getEntityTag() == null) {
        Date lastModified = null;
        if (resCtx.getEntity() instanceof SCIMUser) {
            lastModified = ((SCIMUser) resCtx.getEntity()).getMeta().getLastModified();
            if (resCtx.getEntity() instanceof SCIMGroup) {
                lastModified = ((SCIMGroup) resCtx.getEntity()).getMeta().getLastModified();
            }

            if (lastModified != null) {
                String etagValue = String.valueOf(lastModified.getTime());
                if (StringUtils.isNotBlank(etagValue)) {
                    resCtx.getHeaders().add(HttpHeaders.ETAG, new EntityTag(etagValue, true).toString());
                }
            }
        }
    }
}
项目:PANDA-DEEPLINKING    文件:AbstractJerseyResource.java   
/**
 * Validation of client cache.
 * 
 * @return response with HTTP 304 if cache valid or null if cache not valid
 */
public Response validateClientCache() {
    // Get Request parameters from URI
    String resID = uriInfo.getPathSegments().get(1).getPath();
    ResourceInfo resInfo = pandaSettings.getResourceMap().getMap().get(resID);
    String filePath = resInfo.getFilePath();

    if (filePath != null) {
        File file = new File(filePath);
        if (file.exists()) {
            lastModified = new Date(file.lastModified());
            eTag = new EntityTag(resID + "_" + lastModified.getTime(), false);
            ResponseBuilder builder = request.evaluatePreconditions(lastModified, eTag);

            // resource not modified
            if (builder != null) {
                return builder.cacheControl(pandaSettings.getCacheControl())
                        .lastModified(lastModified).tag(eTag).build();
            }
        } else {
            throw new WebApplicationException(404);
        }
    }

    return null;
}
项目:PANDA-DEEPLINKING    文件:ResourceCache.java   
/**
 * Add multiple values from list to cache. Values need to have SubURIs to
 * reconstruct entire URI!
 * 
 * @param valList list of values
 * @param resourceType type of resource
 * @param resID unique ID of resource
 * @param eTag entity tag of resource for cache validation
 */
public void addResourceValues(ValueExchangeExt valList, DataResourceType resourceType,
        String resID, EntityTag eTag) {
    this.eTags.put(resID, eTag);
    valueCacheWriteLock.lock();
    try {
        String baseURI = valList.getBaseURI();
        for (Value v : valList.getValue()) {
            String subURI = v.getSubURI();
            if (subURI == null) {
                throw new WebApplicationException(422);
            } else {
                addResourceValue(baseURI + v.getSubURI(), v.getValue(), v.getType(),
                        resourceType);
            }
        }
    } finally {
        valueCacheWriteLock.unlock();
    }

}
项目:secure-data-service    文件:BulkExtractTest.java   
@Test
public void testFailedEvaluatePreconditions() throws Exception {
    injector.setOauthAuthenticationWithEducationRole();
    mockApplicationEntity();
    mockBulkExtractEntity(null);

    HttpRequestContext context = new HttpRequestContextAdapter() {
        @Override
        public ResponseBuilder evaluatePreconditions(Date lastModified, EntityTag eTag) {
            return Responses.preconditionFailed();
        }
    };

    Response res = bulkExtract.getEdOrgExtractResponse(context, null, null);
    assertEquals(412, res.getStatus());
}
项目:trellis    文件:PutHandlerTest.java   
@Test
public void testCache() {
    when(mockRequest.evaluatePreconditions(eq(from(binaryTime)), any(EntityTag.class)))
            .thenReturn(status(PRECONDITION_FAILED));
    when(mockResource.getBinary()).thenReturn(of(testBinary));

    final File entity = new File(getClass().getResource("/simpleData.txt").getFile());
    final PutHandler putHandler = new PutHandler(mockLdpRequest, entity, mockResourceService,
            mockIoService, mockBinaryService, null);

    assertThrows(WebApplicationException.class, () -> putHandler.setResource(mockResource));
}
项目:trellis    文件:GetHandlerTest.java   
@Test
public void testGetLdprs() {
    when(mockHeaders.getAcceptableMediaTypes()).thenReturn(singletonList(TEXT_TURTLE_TYPE));

    final GetHandler getHandler = new GetHandler(mockLdpRequest, mockResourceService,
            mockIoService, mockBinaryService, null);

    final Response res = getHandler.getRepresentation(mockResource).build();
    assertEquals(OK, res.getStatusInfo());
    assertTrue(res.getLinks().stream().anyMatch(hasType(LDP.Resource)));
    assertTrue(res.getLinks().stream().anyMatch(hasType(LDP.RDFSource)));
    assertFalse(res.getLinks().stream().anyMatch(hasType(LDP.Container)));
    assertNull(res.getHeaderString(ACCEPT_POST));
    assertEquals(APPLICATION_SPARQL_UPDATE, res.getHeaderString(ACCEPT_PATCH));
    assertNull(res.getHeaderString(PREFERENCE_APPLIED));
    assertNull(res.getHeaderString(ACCEPT_RANGES));
    assertTrue(TEXT_TURTLE_TYPE.isCompatible(res.getMediaType()));
    assertTrue(res.getMediaType().isCompatible(TEXT_TURTLE_TYPE));
    assertEquals(from(time), res.getLastModified());

    final String allow = res.getHeaderString(ALLOW);
    assertTrue(allow.contains(GET));
    assertTrue(allow.contains(HEAD));
    assertTrue(allow.contains(OPTIONS));
    assertTrue(allow.contains(PUT));
    assertTrue(allow.contains(DELETE));
    assertTrue(allow.contains(PATCH));
    assertFalse(allow.contains(POST));

    final EntityTag etag = res.getEntityTag();
    assertTrue(etag.isWeak());
    assertEquals(md5Hex(time + baseUrl), etag.getValue());

    final List<Object> varies = res.getHeaders().get(VARY);
    assertFalse(varies.contains(RANGE));
    assertFalse(varies.contains(WANT_DIGEST));
    assertTrue(varies.contains(ACCEPT_DATETIME));
    assertTrue(varies.contains(PREFER));
}
项目:trellis    文件:GetHandlerTest.java   
@Test
public void testCache() {
    when(mockRequest.evaluatePreconditions(eq(from(time)), any(EntityTag.class)))
            .thenReturn(notModified());
    when(mockHeaders.getAcceptableMediaTypes()).thenReturn(singletonList(TEXT_TURTLE_TYPE));

    final GetHandler getHandler = new GetHandler(mockLdpRequest, mockResourceService,
            mockIoService, mockBinaryService, baseUrl);

    assertThrows(WebApplicationException.class, () -> getHandler.getRepresentation(mockResource));
}
项目:trellis    文件:GetHandlerTest.java   
@Test
public void testCacheLdpNr() {
    when(mockResource.getBinary()).thenReturn(of(testBinary));
    when(mockResource.getInteractionModel()).thenReturn(LDP.NonRDFSource);
    when(mockRequest.evaluatePreconditions(eq(from(binaryTime)), any(EntityTag.class)))
            .thenReturn(notModified());
    when(mockHeaders.getAcceptableMediaTypes()).thenReturn(singletonList(WILDCARD_TYPE));

    final GetHandler getHandler = new GetHandler(mockLdpRequest, mockResourceService,
            mockIoService, mockBinaryService, baseUrl);

    assertThrows(WebApplicationException.class, () -> getHandler.getRepresentation(mockResource));
}
项目:trellis    文件:GetHandlerTest.java   
@Test
public void testMinimalLdprs() {
    when(mockHeaders.getAcceptableMediaTypes()).thenReturn(singletonList(APPLICATION_LD_JSON_TYPE));
    when(mockLdpRequest.getPrefer()).thenReturn(Prefer.valueOf("return=minimal"));

    final GetHandler getHandler = new GetHandler(mockLdpRequest, mockResourceService,
            mockIoService, mockBinaryService, baseUrl);

    final Response res = getHandler.getRepresentation(mockResource).build();
    assertEquals(NO_CONTENT, res.getStatusInfo());
    assertTrue(res.getLinks().stream().anyMatch(hasType(LDP.Resource)));
    assertTrue(res.getLinks().stream().anyMatch(hasType(LDP.RDFSource)));
    assertFalse(res.getLinks().stream().anyMatch(hasType(LDP.Container)));
    assertNull(res.getHeaderString(ACCEPT_POST));
    assertEquals(APPLICATION_SPARQL_UPDATE, res.getHeaderString(ACCEPT_PATCH));
    assertEquals("return=minimal", res.getHeaderString(PREFERENCE_APPLIED));
    assertNull(res.getHeaderString(ACCEPT_RANGES));
    assertTrue(APPLICATION_LD_JSON_TYPE.isCompatible(res.getMediaType()));
    assertTrue(res.getMediaType().isCompatible(APPLICATION_LD_JSON_TYPE));
    assertEquals(from(time), res.getLastModified());

    final String allow = res.getHeaderString(ALLOW);
    assertTrue(allow.contains(GET));
    assertTrue(allow.contains(HEAD));
    assertTrue(allow.contains(OPTIONS));
    assertTrue(allow.contains(PUT));
    assertTrue(allow.contains(DELETE));
    assertTrue(allow.contains(PATCH));
    assertFalse(allow.contains(POST));

    final EntityTag etag = res.getEntityTag();
    assertTrue(etag.isWeak());
    assertEquals(md5Hex(time + baseUrl), etag.getValue());

    final List<Object> varies = res.getHeaders().get(VARY);
    assertFalse(varies.contains(RANGE));
    assertFalse(varies.contains(WANT_DIGEST));
    assertTrue(varies.contains(ACCEPT_DATETIME));
    assertTrue(varies.contains(PREFER));
}
项目:trellis    文件:PatchHandlerTest.java   
@Test
public void testConflict() {
    when(mockRequest.evaluatePreconditions(any(Date.class), any(EntityTag.class)))
        .thenReturn(status(CONFLICT));
    when(mockLdpRequest.getPath()).thenReturn("resource");

    final PatchHandler patchHandler = new PatchHandler(mockLdpRequest, insert,
            mockResourceService, mockIoService, null);

    assertThrows(WebApplicationException.class, () -> patchHandler.updateResource(mockResource));
}
项目:trellis    文件:DeleteHandlerTest.java   
@Test
public void testCache() {
    when(mockRequest.evaluatePreconditions(eq(from(time)), any(EntityTag.class)))
            .thenReturn(status(PRECONDITION_FAILED));
    final DeleteHandler handler = new DeleteHandler(mockLdpRequest, mockResourceService, baseUrl);

    assertThrows(WebApplicationException.class, () -> handler.deleteResource(mockResource));
}
项目:outland    文件:OpenApiDiscoveryResource.java   
private void prepareDiscoveryEntity() throws Exception {
  if (discoveryJson == null) {
    final String schemaUrl =
        UriBuilder.fromUri(baseURI)
            .path(".well-known/outland.yaml")
            .build()
            .toASCIIString();
    Map<String, String> discovery = Maps.newHashMap();
    discovery.put("schema_url", schemaUrl);
    discovery.put("schema_type", "swagger-2.0");
    discoveryJson = gson.toJson(discovery);
    discoveryEtag = new EntityTag(generateEtag(discoveryJson));
  }
}
项目:mid-tier    文件:EntityResponseBuilder.java   
/**
 * Build a response given a concrete request. If the request contain an <code>if-modified-since</code> or
 * <code>if-none-match</code> header this will be checked against the entity given to the builder returning
 * a response with status not modified if appropriate.
 */
public Response build(Request req) {
    EntityTag eTag = new EntityTag(Integer.toString(entity.hashCode()));
    Date lastModified = entity instanceof AbstractAuditable ? ((AbstractAuditable) entity).getLastModifiedTime() : Date.from(Instant.now());
    Response.ResponseBuilder notModifiedBuilder = req.evaluatePreconditions(lastModified, eTag);
    if (notModifiedBuilder != null) {
        return notModifiedBuilder.build();
    }

    Map<String, String> parameters = new ConcurrentHashMap<>();
    if (name != null) {
        parameters.put("concept", name);
    }
    if (version != null) {
        parameters.put("v", version);
    }
    MediaType type = getMediaType(parameters, supportsContentTypeParameter);

    Response.ResponseBuilder b = Response.ok(mapper.apply(entity))
            .type(type)
            .tag(eTag)
            .lastModified(lastModified);

    if (maxAge != null) {
        CacheControl cc = new CacheControl();
        cc.setMaxAge(maxAge);
        b.cacheControl(cc).expires(Date.from(Instant.now().plusSeconds(maxAge)));
    }

    return b.build();
}
项目:http-caching-and-concurrency-examples    文件:ClimateResource.java   
@GET
public Response get(@Context Request request) {
    ClimateDto currentClimate = stockholmClimateRepository.get();
    EntityTag currentETag = eTagGenerator.eTagFor(currentClimate);

    Optional<Response> notModifiedResponse = evaluateETagPrecondition(request, currentETag);
    if (notModifiedResponse.isPresent()) return notModifiedResponse.get();

    return Response.ok(currentClimate).tag(currentETag).build();
}
项目:http-caching-and-concurrency-examples    文件:ClimateResource.java   
@PUT
public Response put(@Context Request request, @NotNull ClimateDto climate) {
    synchronized (transactionLock) {
        ClimateDto currentClimate = stockholmClimateRepository.get();
        EntityTag currentETag = eTagGenerator.eTagFor(currentClimate);

        Optional<Response> preconditionFailedResponse = evaluateETagPrecondition(request, currentETag);
        if (preconditionFailedResponse.isPresent()) return preconditionFailedResponse.get();

        stockholmClimateRepository.save(climate);
    }

    EntityTag eTag = eTagGenerator.eTagFor(climate);
    return Response.noContent().tag(eTag).build();
}
项目:trellis    文件:PutHandlerTest.java   
@Test
public void testCache() {
    when(mockRequest.evaluatePreconditions(eq(from(binaryTime)), any(EntityTag.class)))
            .thenReturn(status(PRECONDITION_FAILED));
    when(mockResource.getBinary()).thenReturn(of(testBinary));

    final File entity = new File(getClass().getResource("/simpleData.txt").getFile());
    final PutHandler putHandler = new PutHandler(mockLdpRequest, entity, mockResourceService,
            mockIoService, mockBinaryService, null);

    assertThrows(WebApplicationException.class, () -> putHandler.setResource(mockResource));
}
项目:trellis    文件:GetHandlerTest.java   
@Test
public void testGetLdprs() {
    when(mockHeaders.getAcceptableMediaTypes()).thenReturn(singletonList(TEXT_TURTLE_TYPE));

    final GetHandler getHandler = new GetHandler(mockLdpRequest, mockResourceService,
            mockIoService, mockBinaryService, null);

    final Response res = getHandler.getRepresentation(mockResource).build();
    assertEquals(OK, res.getStatusInfo());
    assertTrue(res.getLinks().stream().anyMatch(hasType(LDP.Resource)));
    assertTrue(res.getLinks().stream().anyMatch(hasType(LDP.RDFSource)));
    assertFalse(res.getLinks().stream().anyMatch(hasType(LDP.Container)));
    assertNull(res.getHeaderString(ACCEPT_POST));
    assertEquals(APPLICATION_SPARQL_UPDATE, res.getHeaderString(ACCEPT_PATCH));
    assertNull(res.getHeaderString(PREFERENCE_APPLIED));
    assertNull(res.getHeaderString(ACCEPT_RANGES));
    assertTrue(TEXT_TURTLE_TYPE.isCompatible(res.getMediaType()));
    assertTrue(res.getMediaType().isCompatible(TEXT_TURTLE_TYPE));
    assertEquals(from(time), res.getLastModified());

    final String allow = res.getHeaderString(ALLOW);
    assertTrue(allow.contains(GET));
    assertTrue(allow.contains(HEAD));
    assertTrue(allow.contains(OPTIONS));
    assertTrue(allow.contains(PUT));
    assertTrue(allow.contains(DELETE));
    assertTrue(allow.contains(PATCH));
    assertFalse(allow.contains(POST));

    final EntityTag etag = res.getEntityTag();
    assertTrue(etag.isWeak());
    assertEquals(md5Hex(time + baseUrl), etag.getValue());

    final List<Object> varies = res.getHeaders().get(VARY);
    assertFalse(varies.contains(RANGE));
    assertFalse(varies.contains(WANT_DIGEST));
    assertTrue(varies.contains(ACCEPT_DATETIME));
    assertTrue(varies.contains(PREFER));
}