Java源码示例:org.glassfish.jersey.server.model.Resource

示例1
/**
 * Updates the default {@code @Produces} list of every controller method whose list is empty.
 * The new list contains a single media type: "text/html".
 *
 * @param r resource to process.
 * @return newly updated resource.
 */
private static Resource processResource(Resource r) {
    final boolean isControllerClass = isController(r);
    Resource.Builder rb = Resource.builder(r);
    r.getAllMethods().forEach(
            (ResourceMethod m) -> {
                if ((isController(m) || isControllerClass) && m.getProducedTypes().isEmpty()) {
                    final ResourceMethod.Builder rmb = rb.updateMethod(m);
                    rmb.produces(MediaType.TEXT_HTML_TYPE);
                    rmb.build();
                }
            }
    );
    r.getChildResources().forEach(cr -> {
        rb.replaceChildResource(cr, processResource(cr));
    });
    return rb.build();
}
 
示例2
/**
 * Updates the default {@code @Produces} list of every controller method whose list is empty.
 * The new list contains a single media type: "text/html".
 *
 * @param r resource to process.
 * @return newly updated resource.
 */
private static Resource processResource(Resource r) {
    final boolean isControllerClass = isController(r);
    Resource.Builder rb = Resource.builder(r);
    r.getAllMethods().forEach(
            (ResourceMethod m) -> {
                if ((isController(m) || isControllerClass) && m.getProducedTypes().isEmpty()) {
                    final ResourceMethod.Builder rmb = rb.updateMethod(m);
                    rmb.produces(MediaType.TEXT_HTML_TYPE);
                    rmb.build();
                }
            }
    );
    r.getChildResources().forEach(cr -> {
        rb.replaceChildResource(cr, processResource(cr));
    });
    return rb.build();
}
 
示例3
private void addConsumesToResource(String mediaType, Resource.Builder builder, String method, OpenAPIOperationController controller) {
    if (StringUtils.isNotBlank(mediaType)) {
        try {
            MediaType media = MediaType.valueOf(mediaType);
            if (media.getSubtype().equals("yaml")) {
                builder.addMethod(method).handledBy(controller);
            } else {
                builder.addMethod(method).handledBy(controller).consumes(media.toString());
            }
        } catch (Exception e) {
            LOGGER.error("unable to find a matching mediatype for " + mediaType + " in " + controller.getMethodName());
        }
    }else{
        builder.addMethod(method).handledBy(controller);
    }
}
 
示例4
private void registerResourcesAndProviders(ResourceConfig config, Injector injector) {
  while (injector != null) {
    for (Key<?> key : injector.getBindings().keySet()) {
      Type type = key.getTypeLiteral().getType();
      if (type instanceof Class<?>) {
        Class<?> c = (Class<?>) type;
        if (isProviderClass(c)) {
          LOG.info("Registering {} as a provider class", c.getName());
          config.register(c);
        } else if (isResourceClass(c)) {
          // Jersey rejects resources that it doesn't think are acceptable
          // Including abstract classes and interfaces, even if there is a valid Guice binding.
          if(Resource.isAcceptable(c)) {
            LOG.info("Registering {} as a root resource class", c.getName());
            config.register(c);
          } else {
            LOG.warn("Class {} was not registered as a resource; bind a concrete implementation instead", c.getName());
          }
        }

      }
    }
    injector = injector.getParent();
  }
}
 
示例5
/**
 * Registers any Guice-bound providers or root resources.
 */
public static void registerGuiceBound(Injector injector, final JerseyEnvironment environment) {
    while (injector != null) {
        for (Key<?> key : injector.getBindings().keySet()) {
            Type type = key.getTypeLiteral().getType();
            if (type instanceof Class) {
                Class<?> c = (Class) type;
                if (isProviderClass(c)) {
                    logger.info("Registering {} as a provider class", c.getName());
                    environment.register(c);
                } else if (isRootResourceClass(c)) {
                    // Jersey rejects resources that it doesn't think are acceptable
                    // Including abstract classes and interfaces, even if there is a valid Guice binding.
                    if (Resource.isAcceptable(c)) {
                        logger.info("Registering {} as a root resource class", c.getName());
                        environment.register(c);
                    } else {
                        logger.warn("Class {} was not registered as a resource. Bind a concrete implementation instead.", c.getName());
                    }
                }

            }
        }
        injector = injector.getParent();
    }
}
 
示例6
/**
 * <p>getRoutes.</p>
 *
 * @return a {@link java.util.List} object.
 */
@GET
public List<String> getRoutes() {
    List<Resource> resourceList = resourceContext.getResourceModel().getResources();
    List<String> routeList = Lists.newArrayList();
    for (Resource resource : resourceList) {
        String path = resource.getPath().startsWith("/") ? "" : "/" + resource.getPath();
        if (resource.getAllMethods().size() > 0) {
            routeList.add(path);
        }
        routeList.addAll(
                resource.getChildResources()
                        .stream()
                        .map(res -> path + (res.getPath().startsWith("/") ? "" : "/") + res.getPath())
                        .collect(Collectors.toList())
        );
    }
    return routeList;
}
 
示例7
@GET
@Timed
@Produces(MediaType.APPLICATION_JSON)
public String getProfile(@Context Application application) {
    // May init multi times by multi threads, but no effect on the results
    if (SERVER_PROFILES != null) {
        return SERVER_PROFILES;
    }

    Map<String, Object> profiles = InsertionOrderUtil.newMap();
    profiles.put("service", SERVICE);
    profiles.put("version", CoreVersion.VERSION.toString());
    profiles.put("doc", DOC);
    profiles.put("api_doc", API_DOC);
    Set<String> apis = new TreeSet<>();
    for (Class<?> clazz : application.getClasses()) {
        if (!isAnnotatedPathClass(clazz)) {
            continue;
        }
        Resource resource = Resource.from(clazz);
        APICategory apiCategory = APICategory.parse(resource.getName());
        apis.add(apiCategory.dir);
    }
    profiles.put("apis", apis);
    SERVER_PROFILES = JsonUtil.toJson(profiles);
    return SERVER_PROFILES;
}
 
示例8
/**
 * Determines if a resource is a controller.
 *
 * @param resource resource to test.
 * @return outcome of controller test.
 */
private static boolean isController(Resource resource) {
    final Boolean b1 = resource.getHandlerClasses().stream()
            .map(c -> c.isAnnotationPresent(Controller.class))
            .reduce(Boolean.FALSE, Boolean::logicalOr);
    final Boolean b2 = resource.getHandlerInstances().stream()
            .map(o -> o.getClass().isAnnotationPresent(Controller.class))
            .reduce(Boolean.FALSE, Boolean::logicalOr);
    return b1 || b2;
}
 
示例9
@Test
public void processResourceModel() {
	ResourceModel.Builder rmb = new ResourceModel.Builder(false);
	Resource resource = Resource.builder(SomeController.class).build();
	rmb.addResource(resource);
	ResourceModel processedModel = new KrazoModelProcessor().processResourceModel(rmb.build(), null);
	Resource processedResource = processedModel.getResources().get(0);
	processedResource.getResourceMethods().forEach(m -> assertTrue(m.getProducedTypes().contains(MediaType.TEXT_HTML_TYPE)));
}
 
示例10
/**
 * Determines if a resource is a controller.
 *
 * @param resource resource to test.
 * @return outcome of controller test.
 */
private static boolean isController(Resource resource) {
    final Boolean b1 = resource.getHandlerClasses().stream()
            .map(c -> c.isAnnotationPresent(Controller.class))
            .reduce(Boolean.FALSE, Boolean::logicalOr);
    final Boolean b2 = resource.getHandlerInstances().stream()
            .map(o -> o.getClass().isAnnotationPresent(Controller.class))
            .reduce(Boolean.FALSE, Boolean::logicalOr);
    return b1 || b2;
}
 
示例11
@Test
public void processResourceModel() {
	ResourceModel.Builder rmb = new ResourceModel.Builder(false);
	Resource resource = Resource.builder(SomeController.class).build();
	rmb.addResource(resource);
	ResourceModel processedModel = new OzarkModelProcessor().processResourceModel(rmb.build(), null);
	Resource processedResource = processedModel.getResources().get(0);
	processedResource.getResourceMethods().forEach(m -> assertTrue(m.getProducedTypes().contains(MediaType.TEXT_HTML_TYPE)));
}
 
示例12
private void enableSwaggerJSON(OpenAPI openAPI, List<String> swaggerProcessors) {
    final Resource.Builder builder = Resource.builder();
    builder.path(basePath(originalBasePath, StringUtils.appendIfMissing(config.getSwaggerBase(), "/") + "openapi.json"))
            .addMethod(HttpMethod.GET)
            .produces(MediaType.APPLICATION_JSON)
            .handledBy(new OpenAPIResourceController(openAPI, swaggerProcessors))
            .build();

    registerResources(builder.build());
}
 
示例13
private void enableSwaggerYAML(OpenAPI openAPI, List<String> swaggerProcessors) {
    final Resource.Builder builder = Resource.builder();
    builder.path(basePath(originalBasePath, StringUtils.appendIfMissing(config.getSwaggerBase(), "/") + "openapi.yaml"))
            .addMethod(HttpMethod.GET)
            .produces("application/yaml")
            .handledBy(new OpenAPIResourceController(openAPI, swaggerProcessors))
            .build();

    registerResources(builder.build());
}
 
示例14
private void registerCrudApi(String path, Inflector<ContainerRequestContext, Response> handler,
		Inflector<ContainerRequestContext, Response> linksHandler) {
	Resource.Builder core = Resource.builder(path);
	// list endpoints (both do the same thing)
	core.addMethod(GET).produces(JSON).handledBy(handler);
	core.addChildResource("search/{querytype}").addMethod(GET).produces(JSON).handledBy(handler);
	core.addChildResource("search").addMethod(GET).produces(JSON).handledBy(handler);
	// CRUD endpoints (non-batch)
	core.addMethod(POST).produces(JSON).consumes(JSON).handledBy(handler);
	core.addChildResource("{id}").addMethod(GET).produces(JSON).handledBy(handler);
	core.addChildResource("{id}").addMethod(PUT).produces(JSON).consumes(JSON).handledBy(handler);
	core.addChildResource("{id}").addMethod(PATCH).produces(JSON).consumes(JSON).handledBy(handler);
	core.addChildResource("{id}").addMethod(DELETE).produces(JSON).handledBy(handler);
	// links CRUD endpoints
	core.addChildResource("{id}/links/{type2}/{id2}").addMethod(GET).produces(JSON).handledBy(linksHandler);
	core.addChildResource("{id}/links/{type2}").addMethod(GET).produces(JSON).handledBy(linksHandler);
	core.addChildResource("{id}/links/{id2}").addMethod(POST).produces(JSON).handledBy(linksHandler);
	core.addChildResource("{id}/links/{id2}").addMethod(PUT).produces(JSON).handledBy(linksHandler);
	core.addChildResource("{id}/links/{type2}/{id2}").addMethod(DELETE).produces(JSON).handledBy(linksHandler);
	core.addChildResource("{id}/links").addMethod(DELETE).produces(JSON).handledBy(linksHandler);
	// CRUD endpoints (batch)
	Resource.Builder batch = Resource.builder("_batch");
	batch.addMethod(POST).produces(JSON).consumes(JSON).handledBy(batchCreateHandler(null));
	batch.addMethod(GET).produces(JSON).handledBy(batchReadHandler(null));
	batch.addMethod(PUT).produces(JSON).consumes(JSON).handledBy(batchCreateHandler(null));
	batch.addMethod(PATCH).produces(JSON).consumes(JSON).handledBy(batchUpdateHandler(null));
	batch.addMethod(DELETE).produces(JSON).handledBy(batchDeleteHandler(null));

	registerResources(core.build());
	registerResources(batch.build());
}
 
示例15
@Override
public void visitResource(final Resource resource) {
    processComponents(resource);
}
 
示例16
@Override
public void visitChildResource(final Resource resource) {
    processComponents(resource);
}
 
示例17
public Resource.Builder getBuilder() {
  return resourceBuilder;
}
 
示例18
@Override public Resource getMatchedModelResource() {
  return null;
}
 
示例19
@Override public List<Resource> getLocatorSubResources() {
  return null;
}
 
示例20
/**
 * <p>getResources.</p>
 *
 * @return a {@link java.util.Set} object.
 */
public Set<Resource> getResources() {
    return config.getResources();
}
 
示例21
/**
 * <p>registerResources.</p>
 *
 * @param resources a {@link java.util.Set} object.
 * @return a {@link ameba.core.Application} object.
 */
public Application registerResources(Set<Resource> resources) {
    config.registerResources(resources);
    return this;
}
 
示例22
/**
 * <p>registerResources.</p>
 *
 * @param resources a {@link org.glassfish.jersey.server.model.Resource} object.
 * @return a {@link ameba.core.Application} object.
 */
public Application registerResources(Resource... resources) {
    config.registerResources(resources);
    return this;
}