All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.englishtown.vertx.guice.GuiceJerseyServer Maven / Gradle / Ivy

Go to download

Allows creating JAX-RS jersey resources that will handle incoming http requests to vert.x

The newest version!
package com.englishtown.vertx.guice;

import com.englishtown.vertx.jersey.JerseyHandler;
import com.englishtown.vertx.jersey.JerseyServerOptions;
import com.englishtown.vertx.jersey.VertxContainer;
import com.englishtown.vertx.jersey.impl.DefaultJerseyServer;
import com.google.inject.Injector;
import com.google.inject.Key;
import org.glassfish.hk2.api.Context;
import org.glassfish.hk2.api.ServiceLocator;
import org.glassfish.hk2.api.TypeLiteral;
import org.glassfish.hk2.utilities.ServiceLocatorUtilities;
import org.glassfish.hk2.utilities.binding.AbstractBinder;
import org.glassfish.jersey.server.model.ModelProcessor;
import org.glassfish.jersey.server.monitoring.ApplicationEventListener;
import org.glassfish.jersey.server.spi.ContainerLifecycleListener;
import org.jvnet.hk2.guice.bridge.api.GuiceBridge;
import org.jvnet.hk2.guice.bridge.api.GuiceIntoHK2Bridge;
import org.jvnet.hk2.guice.bridge.api.GuiceScope;
import org.jvnet.hk2.guice.bridge.internal.GuiceScopeContext;

import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.ReaderInterceptor;
import javax.ws.rs.ext.WriterInterceptor;
import java.lang.reflect.Type;
import java.util.Set;

/**
 * Guice extension of {@link com.englishtown.vertx.jersey.impl.DefaultJerseyServer}
 */
public class GuiceJerseyServer extends DefaultJerseyServer {

    @Inject
    public GuiceJerseyServer(JerseyHandler jerseyHandler, VertxContainer container, Provider optionsProvider, ServiceLocator locator, Injector injector) {
        super(jerseyHandler, container, optionsProvider);
        initBridge(locator, injector);
    }

    /**
     * Initialize the hk2 bridge
     *
     * @param locator  the HK2 locator
     * @param injector the Guice injector
     */
    protected void initBridge(ServiceLocator locator, Injector injector) {

        // Set up bridge
        GuiceBridge.getGuiceBridge().initializeGuiceBridge(locator);
        GuiceIntoHK2Bridge guiceBridge = locator.getService(GuiceIntoHK2Bridge.class);
        guiceBridge.bridgeGuiceInjector(injector);
        injectMultibindings(locator, injector);

        // Bind guice scope context
        ServiceLocatorUtilities.bind(locator, new AbstractBinder() {
            @Override
            protected void configure() {
                bind(GuiceScopeContext.class).to(new TypeLiteral>() {
                }).in(Singleton.class);
            }
        });
    }

    /**
     * This is a workaround for the hk2 bridge limitations
     *
     * @param locator  the HK2 locator
     * @param injector the Guice injector
     */
    protected void injectMultibindings(ServiceLocator locator, Injector injector) {

        injectMultiBindings(locator, injector, new Key>() {
        }, ContainerRequestFilter.class);
        injectMultiBindings(locator, injector, new Key>() {
        }, ContainerResponseFilter.class);
        injectMultiBindings(locator, injector, new Key>() {
        }, ReaderInterceptor.class);
        injectMultiBindings(locator, injector, new Key>() {
        }, WriterInterceptor.class);
        injectMultiBindings(locator, injector, new Key>() {
        }, ModelProcessor.class);
        injectMultiBindings(locator, injector, new Key>() {
        }, ContainerLifecycleListener.class);
        injectMultiBindings(locator, injector, new Key>() {
        }, ApplicationEventListener.class);
        injectMultiBindings(locator, injector, new Key>() {
        }, ExceptionMapper.class);

    }

    protected void injectMultiBindings(ServiceLocator locator, Injector injector, Key> key, Type type) {

        Set set = injector.getInstance(key);

        if (set != null && !set.isEmpty()) {
            for (Object obj : set) {
                ServiceLocatorUtilities.addOneConstant(locator, obj, null, type);
            }
        }

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy