Search in sources :

Example 1 with FeatureContextDelegate

use of org.jboss.resteasy.util.FeatureContextDelegate in project resteasy by resteasy.

the class ResteasyProviderFactoryImpl method processProviderInstanceContracts.

private void processProviderInstanceContracts(Object provider, Map<Class<?>, Integer> contracts, Integer priorityOverride, boolean builtIn, Map<Class<?>, Integer> newContracts) {
    clientHelper.processProviderInstanceContracts(provider, contracts, priorityOverride, builtIn, newContracts);
    serverHelper.processProviderInstanceContracts(provider, contracts, priorityOverride, builtIn, newContracts);
    if (Utils.isA(provider, ParamConverterProvider.class, contracts)) {
        injectProperties(provider);
        int priority = Utils.getPriority(priorityOverride, contracts, ParamConverterProvider.class, provider.getClass());
        copyParamConvertsIfNeeded();
        sortedParamConverterProviders.add(new ExtSortedKey<>(null, (ParamConverterProvider) provider, provider.getClass(), priority, builtIn));
        newContracts.put(ParamConverterProvider.class, priority);
    }
    if (Utils.isA(provider, ContextResolver.class, contracts)) {
        try {
            int priority = Utils.getPriority(priorityOverride, contracts, ContextResolver.class, provider.getClass());
            addContextResolver((ContextResolver) provider, priority, provider.getClass(), false);
            newContracts.put(ContextResolver.class, priority);
        } catch (Exception e) {
            throw new RuntimeException(Messages.MESSAGES.unableToInstantiateContextResolver(), e);
        }
    }
    if (Utils.isA(provider, ContextInjector.class, contracts)) {
        try {
            addContextInjector((ContextInjector) provider, provider.getClass());
            int priority = Utils.getPriority(priorityOverride, contracts, ContextInjector.class, provider.getClass());
            newContracts.put(ContextInjector.class, priority);
        } catch (Exception e) {
            throw new RuntimeException(Messages.MESSAGES.unableToInstantiateContextInjector(), e);
        }
    }
    if (Utils.isA(provider, InjectorFactory.class, contracts)) {
        this.injectorFactory = (InjectorFactory) provider;
        newContracts.put(InjectorFactory.class, 0);
    }
    if (Utils.isA(provider, Feature.class, contracts)) {
        Feature feature = (Feature) provider;
        Utils.injectProperties(this, provider.getClass(), provider);
        ConstrainedTo constrainedTo = (ConstrainedTo) provider.getClass().getAnnotation(ConstrainedTo.class);
        if (constrainedTo == null || constrainedTo.value() == getRuntimeType()) {
            if (feature.configure(new FeatureContextDelegate(this))) {
                enabledFeatures.add(feature);
            }
        }
        int priority = Utils.getPriority(priorityOverride, contracts, Feature.class, provider.getClass());
        newContracts.put(Feature.class, priority);
    }
    if (Utils.isA(provider, ResourceClassProcessor.class, contracts)) {
        int priority = Utils.getPriority(priorityOverride, contracts, ResourceClassProcessor.class, provider.getClass());
        addResourceClassProcessor((ResourceClassProcessor) provider, priority);
        newContracts.put(ResourceClassProcessor.class, priority);
    }
    if (Utils.isA(provider, HeaderDelegate.class, contracts)) {
        Type[] headerTypes = Types.getActualTypeArgumentsOfAnInterface(provider.getClass(), HeaderDelegate.class);
        if (headerTypes.length == 0) {
            LogMessages.LOGGER.cannotRegisterheaderDelegate(provider.getClass());
        } else {
            Class<?> headerClass = Types.getRawType(headerTypes[0]);
            addHeaderDelegate(headerClass, (HeaderDelegate) provider);
        }
    }
    if (Utils.isA(provider, ThreadContext.class, contracts)) {
        ResteasyContext.computeIfAbsent(ThreadContexts.class, ThreadContexts::new).add((ThreadContext<?>) provider);
    }
}
Also used : ConstrainedTo(jakarta.ws.rs.ConstrainedTo) MediaType(jakarta.ws.rs.core.MediaType) ParameterizedType(java.lang.reflect.ParameterizedType) RuntimeType(jakarta.ws.rs.RuntimeType) Type(java.lang.reflect.Type) FeatureContextDelegate(org.jboss.resteasy.util.FeatureContextDelegate) ParamConverterProvider(jakarta.ws.rs.ext.ParamConverterProvider) Feature(jakarta.ws.rs.core.Feature) DynamicFeature(jakarta.ws.rs.container.DynamicFeature) ThreadContexts(org.jboss.resteasy.spi.concurrent.ThreadContexts)

Aggregations

ConstrainedTo (jakarta.ws.rs.ConstrainedTo)1 RuntimeType (jakarta.ws.rs.RuntimeType)1 DynamicFeature (jakarta.ws.rs.container.DynamicFeature)1 Feature (jakarta.ws.rs.core.Feature)1 MediaType (jakarta.ws.rs.core.MediaType)1 ParamConverterProvider (jakarta.ws.rs.ext.ParamConverterProvider)1 ParameterizedType (java.lang.reflect.ParameterizedType)1 Type (java.lang.reflect.Type)1 ThreadContexts (org.jboss.resteasy.spi.concurrent.ThreadContexts)1 FeatureContextDelegate (org.jboss.resteasy.util.FeatureContextDelegate)1