/** * Copyright 2013 ArcBees Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.jci.server.guice; import com.google.inject.Binding; import com.google.inject.Injector; import org.jboss.resteasy.plugins.guice.GuiceResourceFactory; import org.jboss.resteasy.plugins.server.servlet.FilterDispatcher; import org.jboss.resteasy.spi.Registry; import org.jboss.resteasy.spi.ResourceFactory; import org.jboss.resteasy.spi.ResteasyProviderFactory; import org.jboss.resteasy.util.GetRestful; import javax.inject.Inject; import javax.inject.Singleton; import javax.servlet.FilterConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.ws.rs.ext.Provider; import java.lang.reflect.Type; import java.util.logging.Logger; @Singleton public class GuiceRestEasyFilterDispatcher extends FilterDispatcher { private static final Logger logger = Logger.getLogger(GuiceRestEasyFilterDispatcher.class.getName()); @Inject Injector injector; @Override public void init(FilterConfig servletConfig) throws ServletException { super.init(servletConfig); ServletContext context = servletConfig.getServletContext(); Registry registry = (Registry) context.getAttribute(Registry.class.getName()); ResteasyProviderFactory providerFactory = (ResteasyProviderFactory) context.getAttribute (ResteasyProviderFactory.class.getName()); for (final Binding<?> binding : injector.getBindings().values()) { final Type type = binding.getKey().getTypeLiteral().getType(); if (type instanceof Class) { final Class<?> beanClass = (Class) type; if (GetRestful.isRootResource(beanClass)) { final ResourceFactory resourceFactory = new GuiceResourceFactory(binding.getProvider(), beanClass); logger.info("Registering factory for" + beanClass.getName()); registry.addResourceFactory(resourceFactory); } if (beanClass.isAnnotationPresent(Provider.class)) { logger.info("registering provider instance for" + beanClass.getName()); providerFactory.registerProviderInstance(binding.getProvider().get()); } } } } }