/** * Create new builder pre initialized with {@code resourceModel}. * * @param resourceModel Resource model. * @param subResourceModel {@code true} if resource model created by this builder will be sub resource model, * {@code false} if it is a application root resource model. */ public Builder(ResourceModel resourceModel, boolean subResourceModel) { this.resources = resourceModel.getResources(); this.subResourceModel = subResourceModel; }
/** * Create new builder pre initialized with {@code resourceModel}. * * @param resourceModel Resource model. * @param subResourceModel {@code true} if resource model created by this builder will be sub resource model, * {@code false} if it is a application root resource model. */ public Builder(ResourceModel resourceModel, boolean subResourceModel) { this.resources = resourceModel.getResources(); this.subResourceModel = subResourceModel; }
@Override public ResourceModel processSubResource(ResourceModel subResourceModel, Configuration configuration) { LOG.debug("Map for sub-resource model <" + subResourceModel + ">:"); logResources(subResourceModel.getResources()); return subResourceModel; }
@Override public ResourceModel processResourceModel(ResourceModel resourceModel, Configuration configuration) { checkResources(resourceModel.getResources()); return resourceModel; }
@Override public ResourceModel processSubResource(ResourceModel subResourceModel, Configuration configuration) { checkResources(subResourceModel.getResources()); return subResourceModel; }
private void validateSubResource(final ResourceModel subResourceModel) { if (subResourceModel.getResources().size() != 1) { throw new ProcessingException(LocalizationMessages.ERROR_SUB_RESOURCE_LOCATOR_MORE_RESOURCES(subResourceModel .getResources().size())); } }
private void validateSubResource(final ResourceModel subResourceModel) { if (subResourceModel.getResources().size() != 1) { throw new ProcessingException(LocalizationMessages.ERROR_SUB_RESOURCE_LOCATOR_MORE_RESOURCES(subResourceModel .getResources().size())); } }
@Override public ResourceModel processResourceModel(ResourceModel resourceModel, Configuration configuration) { LOG.debug("Map for resource model <" + resourceModel + ">:"); final List<Resource> resources = new ArrayList<>(); for (Resource resource : resourceModel.getResources()) { resources.add(resource); resources.addAll(findChildResources(resource)); } logResources(resources); return resourceModel; }
@Override public void onEvent(ApplicationEvent event) { if (event.getType() == ApplicationEvent.Type.INITIALIZATION_APP_FINISHED) { resources = event.getResourceModel().getResources(); providers = event.getProviders(); final String resourceClasses = resources.stream() .map(x -> x.getClass().getCanonicalName()) .collect(Collectors.joining(", ")); final String providerClasses = providers.stream() .map(Class::getCanonicalName) .collect(Collectors.joining(", ")); LOGGER.debug("resources = {}", resourceClasses); LOGGER.debug("providers = {}", providerClasses); LOGGER.info(getEndpointsInfo()); } }
@Override public ResourceModel processResourceModel(ResourceModel model, Configuration config) { // Create new resource model. final ResourceModel.Builder resourceModelBuilder = new ResourceModel.Builder(false); for (final Resource resource : model.getResources()) { for (Class handlerClass : resource.getHandlerClasses()) { final String packageName = handlerClass.getPackage().getName(); final Optional<String> packagePrefix = packagePrefixes.entrySet().stream() .filter(entry -> packageName.startsWith(entry.getKey())) .sorted((o1, o2) -> -o1.getKey().compareTo(o2.getKey())) .map(Map.Entry::getValue) .findFirst(); if (packagePrefix.isPresent()) { final String prefixedPath = prefixPath(packagePrefix.get(), resource.getPath()); final Resource newResource = Resource.builder(resource) .path(prefixedPath) .build(); resourceModelBuilder.addResource(newResource); } else { resourceModelBuilder.addResource(resource); } } } return resourceModelBuilder.build(); }
/** * Process all {@link Invocable invocables} and defines * {@link org.glassfish.jersey.server.model.Invocable#getRoutingResponseType() routing response types} * as {@link Viewable} for all methods annotated with {@link Template}. * * @param resourceModel resource model to process. * @param subResourceModel determines whether the resource model represents sub-resource. * @return Modified resource model. */ private ResourceModel.Builder processTemplateAnnotatedInvocables(ResourceModel resourceModel, final boolean subResourceModel) { ResourceModel.Builder modelBuilder = new ResourceModel.Builder(subResourceModel); for (Resource resource : resourceModel.getResources()) { Resource newResource = processResource(resource); modelBuilder.addResource(newResource); } return modelBuilder; }
@Override public Continuation apply(final RequestProcessingContext processingContext) { Object subResourceInstance = getResource(processingContext); if (subResourceInstance == null) { throw new NotFoundException(); } final RoutingContext routingContext = processingContext.routingContext(); final LocatorRouting routing; if (subResourceInstance instanceof Resource) { // Caching here is disabled by default. It can be enabled by setting // ServerProperties.SUBRESOURCE_LOCATOR_CACHE_JERSEY_RESOURCE_ENABLED to true. routing = runtimeLocatorBuilder.getRouting((Resource) subResourceInstance); } else { Class<?> locatorClass = subResourceInstance.getClass(); if (locatorClass.isAssignableFrom(Class.class)) { // subResourceInstance is class itself locatorClass = (Class<?>) subResourceInstance; if (!runtimeLocatorBuilder.isCached(locatorClass)) { // If we can't create an instance of the class, don't proceed. subResourceInstance = createFunction.apply(locatorClass); } } routingContext.pushMatchedResource(subResourceInstance); resourceContext.bindResourceIfSingleton(subResourceInstance); routing = runtimeLocatorBuilder.getRouting(locatorClass); } routingContext.pushLocatorSubResource(routing.locator.getResources().get(0)); processingContext.triggerEvent(RequestEvent.Type.SUBRESOURCE_LOCATED); return Continuation.of(processingContext, routing.router); }
@Override public Continuation apply(final RequestProcessingContext processingContext) { Object subResourceInstance = getResource(processingContext); if (subResourceInstance == null) { throw new NotFoundException(); } final RoutingContext routingContext = processingContext.routingContext(); final LocatorRouting routing; if (subResourceInstance instanceof Resource) { // Caching here is disabled by default. It can be enabled by setting // ServerProperties.SUBRESOURCE_LOCATOR_CACHE_JERSEY_RESOURCE_ENABLED to true. routing = runtimeLocatorBuilder.getRouting((Resource) subResourceInstance); } else { Class<?> locatorClass = subResourceInstance.getClass(); if (locatorClass.isAssignableFrom(Class.class)) { // subResourceInstance is class itself locatorClass = (Class<?>) subResourceInstance; if (!runtimeLocatorBuilder.isCached(locatorClass)) { // If we can't create an instance of the class, don't proceed. subResourceInstance = createFunction.apply(locatorClass); } } routingContext.pushMatchedResource(subResourceInstance); resourceContext.bindResourceIfSingleton(subResourceInstance); routing = runtimeLocatorBuilder.getRouting(locatorClass); } routingContext.pushLocatorSubResource(routing.locator.getResources().get(0)); processingContext.triggerEvent(RequestEvent.Type.SUBRESOURCE_LOCATED); return Continuation.of(processingContext, routing.router); }
@Override public ResourceModel processSubResource(ResourceModel subResource, Configuration configuration) { final Resource resource = Resource.builder() .mergeWith(Resource.from(EnhancedSubResourceSingleton.class)) .mergeWith(Resource.from(EnhancedSubResource.class)) .mergeWith(subResource.getResources().get(0)).build(); return new ResourceModel.Builder(true).addResource(resource).build(); } }
private LocatorRouting buildRouting(final Resource subResource) { final ResourceModel model = new ResourceModel.Builder(true).addResource(subResource).build(); final ResourceModel enhancedModel = enhance(model); if (!disableValidation) { validateResource(enhancedModel); } final Resource enhancedLocator = enhancedModel.getResources().get(0); for (final Class<?> handlerClass : enhancedLocator.getHandlerClasses()) { resourceContext.bindResource(handlerClass); } return new LocatorRouting(enhancedModel, runtimeModelBuilder.buildModel(enhancedModel.getRuntimeResourceModel(), true)); }
private LocatorRouting buildRouting(final Resource subResource) { final ResourceModel model = new ResourceModel.Builder(true).addResource(subResource).build(); final ResourceModel enhancedModel = enhance(model); if (!disableValidation) { validateResource(enhancedModel); } final Resource enhancedLocator = enhancedModel.getResources().get(0); for (final Class<?> handlerClass : enhancedLocator.getHandlerClasses()) { resourceContext.bindResource(handlerClass); } return new LocatorRouting(enhancedModel, runtimeModelBuilder.buildModel(enhancedModel.getRuntimeResourceModel(), true)); }
/** * Create new builder pre initialized with {@code resourceModel}. * * @param resourceModel Resource model. * @param subResourceModel {@code true} if resource model created by this builder will be sub resource model, * {@code false} if it is a application root resource model. */ public Builder(ResourceModel resourceModel, boolean subResourceModel) { this.resources = resourceModel.getResources(); this.subResourceModel = subResourceModel; }
private void validateSubResource(final ResourceModel subResourceModel) { if (subResourceModel.getResources().size() != 1) { throw new ProcessingException(LocalizationMessages.ERROR_SUB_RESOURCE_LOCATOR_MORE_RESOURCES(subResourceModel .getResources().size())); } }
@Override public Continuation apply(final RequestProcessingContext processingContext) { Object subResourceInstance = getResource(processingContext); if (subResourceInstance == null) { throw new NotFoundException(); } final RoutingContext routingContext = processingContext.routingContext(); final LocatorRouting routing; if (subResourceInstance instanceof Resource) { // Caching here is disabled by default. It can be enabled by setting // ServerProperties.SUBRESOURCE_LOCATOR_CACHE_JERSEY_RESOURCE_ENABLED to true. routing = runtimeLocatorBuilder.getRouting((Resource) subResourceInstance); } else { Class<?> locatorClass = subResourceInstance.getClass(); if (locatorClass.isAssignableFrom(Class.class)) { // subResourceInstance is class itself locatorClass = (Class<?>) subResourceInstance; if (!runtimeLocatorBuilder.isCached(locatorClass)) { // If we can't create an instance of the class, don't proceed. subResourceInstance = createFunction.apply(locatorClass); } } routingContext.pushMatchedResource(subResourceInstance); resourceContext.bindResourceIfSingleton(subResourceInstance); routing = runtimeLocatorBuilder.getRouting(locatorClass); } routingContext.pushLocatorSubResource(routing.locator.getResources().get(0)); processingContext.triggerEvent(RequestEvent.Type.SUBRESOURCE_LOCATED); return Continuation.of(processingContext, routing.router); }
private LocatorRouting buildRouting(final Resource subResource) { final ResourceModel model = new ResourceModel.Builder(true).addResource(subResource).build(); final ResourceModel enhancedModel = enhance(model); if (!disableValidation) { validateResource(enhancedModel); } final Resource enhancedLocator = enhancedModel.getResources().get(0); for (final Class<?> handlerClass : enhancedLocator.getHandlerClasses()) { resourceContext.bindResource(handlerClass); } return new LocatorRouting(enhancedModel, runtimeModelBuilder.buildModel(enhancedModel.getRuntimeResourceModel(), true)); }