dispatchingListener = new DispatchingListenerProxy();
// Initiate the WADL factory
this.wadlFactory = new WadlFactory(resourceConfig);
WadlApplicationContextInjectionProxy wadlApplicationContextInjectionProxy = null;
if(!resourceConfig.getFeature(ResourceConfig.FEATURE_DISABLE_WADL)) {
wadlApplicationContextInjectionProxy = new WadlApplicationContextInjectionProxy();
injectableFactory.add(new SingletonTypeInjectableProvider<Context, WadlApplicationContext>(
WadlApplicationContext.class, wadlApplicationContextInjectionProxy) {});
// In order for the application to properly marshall the Application
// object we need to make sure that we provide a JAXBContext that
// will work
final WadlApplicationContext wac = wadlApplicationContextInjectionProxy;
@Provider @Produces({MediaTypes.WADL_STRING,MediaTypes.WADL_JSON_STRING, MediaType.APPLICATION_XML})
class WadlContextResolver implements ContextResolver<JAXBContext>
{
@Override
public JAXBContext getContext(Class<?> type) {
if (com.sun.research.ws.wadl.Application.class.isAssignableFrom(type)) {
return wac.getJAXBContext();
}
else {
return null;
}
}
}
resourceConfig.getSingletons().add(new WadlContextResolver());
// Update the provider services, so this is used
providerServices.update(resourceConfig.getProviderClasses(),
resourceConfig.getProviderSingletons(), injectableFactory);
}
// Initiate filter
filterFactory.init(resourceConfig);
if (!resourceConfig.getMediaTypeMappings().isEmpty() ||
!resourceConfig.getLanguageMappings().isEmpty()) {
boolean present = false;
for (ContainerRequestFilter f : filterFactory.getRequestFilters()) {
present |= f instanceof UriConnegFilter;
}
if (!present) {
filterFactory.getRequestFilters().add(new UriConnegFilter(
resourceConfig.getMediaTypeMappings(),
resourceConfig.getLanguageMappings()));
} else {
LOGGER.warning("The media type and language mappings " +
"declared in the ResourceConfig are ignored because " +
"there is an instance of " + UriConnegFilter.class.getName() +
"present in the list of request filters.");
}
}
// Initiate context resolvers
crf.init(providerServices, injectableFactory);
// Initiate the exception mappers
exceptionFactory.init(providerServices);
// Initiate message body readers/writers
bodyFactory.init();
// Initiate string readers
stringReaderFactory.init(providerServices);
// Inject on all components
Errors.setReportMissingDependentFieldOrMethod(true);
cpFactory.injectOnAllComponents();
cpFactory.injectOnProviderInstances(resourceConfig.getProviderSingletons());
// web application is ready
for (IoCComponentProviderFactory providerFactory : providerFactories) {
if (providerFactory instanceof WebApplicationListener) {
WebApplicationListener listener = (WebApplicationListener) providerFactory;
listener.onWebApplicationReady();
}
}
createAbstractResourceModelStructures();
// Obtain all root resource rules
RulesMap<UriRule> rootRules = new RootResourceUriRules(this,
resourceConfig, wadlFactory, injectableFactory).getRules();
this.rootsRule = new RootResourceClassesRule(rootRules);
if(!resourceConfig.getFeature(ResourceConfig.FEATURE_DISABLE_WADL)) {
wadlApplicationContextInjectionProxy.init(wadlFactory);
}
requestListener = MonitoringProviderFactory.createRequestListener(providerServices);
responseListener = MonitoringProviderFactory.createResponseListener(providerServices);
dispatchingListener.init(providerServices);