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;
}