Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright (c) 2013-2014 Oracle and/or its affiliates. All rights reserved.
   *
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common Development
   * and Distribution License("CDDL") (collectively, the "License").  You
   * may not use this file except in compliance with the License.  You can
  * obtain a copy of the License at
  * http://glassfish.java.net/public/CDDL+GPL_1_1.html
  * or packager/legal/LICENSE.txt.  See the License for the specific
  * language governing permissions and limitations under the License.
  *
  * When distributing the software, include this License Header Notice in each
  * file and include the License file at packager/legal/LICENSE.txt.
  *
  * GPL Classpath Exception:
  * Oracle designates this particular file as subject to the "Classpath"
  * exception as provided by Oracle in the GPL Version 2 section of the License
  * file that accompanied this code.
  *
  * Modifications:
  * If applicable, add the following below the License Header, with the fields
  * enclosed by brackets [] replaced by your own identifying information:
  * "Portions Copyright [year] [name of copyright owner]"
  *
  * Contributor(s):
  * If you wish your version of this file to be governed by only the CDDL or
  * only the GPL Version 2, indicate your decision by adding "[Contributor]
  * elects to include this software in this distribution under the [CDDL or GPL
  * Version 2] license."  If you don't indicate a single choice of license, a
  * recipient has the option to distribute your version of this file under
  * either the CDDL, the GPL Version 2 or to extend the choice of license to
  * its licensees as provided above.  However, if you add GPL Version 2 code
  * and therefore, elected the GPL Version 2 license, then the option applies
  * only if the new code is made subject to such option by the copyright
  * holder.
  */
 package org.glassfish.jersey.server.spring;
 
 import java.util.Set;
 
 
 
 
Custom ComponentProvider class. Responsible for 1) bootstrapping Jersey 2 Spring integration and 2) making Jersey skip JAX-RS Spring component life-cycle management and leave it to us.

Author(s):
Marko Asplund (marko.asplund at yahoo.com)
 
 public class SpringComponentProvider implements ComponentProvider {
 
     private static final Logger LOGGER = Logger.getLogger(SpringComponentProvider.class.getName());
     private static final String DEFAULT_CONTEXT_CONFIG_LOCATION = "applicationContext.xml";
     private static final String PARAM_CONTEXT_CONFIG_LOCATION = "contextConfigLocation";
     private static final String PARAM_SPRING_CONTEXT = "contextConfig";
 
     private volatile ServiceLocator locator;
     private volatile ApplicationContext ctx;
 
     @Override
     public void initialize(ServiceLocator locator) {
         this. = locator;
 
         if (.isLoggable(.)) {
             .fine(LocalizationMessages.CTX_LOOKUP_STARTED());
         }
 
         ServletContext sc = locator.getService(ServletContext.class);
 
         if(sc != null) {
             // servlet container
              = WebApplicationContextUtils.getWebApplicationContext(sc);
         } else {
             // non-servlet container
              = createSpringContext();
         }
         if( == null) {
            .severe(LocalizationMessages.CTX_LOOKUP_FAILED());
            return;
        }
        .config(LocalizationMessages.CTX_LOOKUP_SUCESSFUL());
        // initialize HK2 spring-bridge
        SpringBridge.getSpringBridge().initializeSpringBridge(locator);
        SpringIntoHK2Bridge springBridge = locator.getService(SpringIntoHK2Bridge.class);
        springBridge.bridgeSpringBeanFactory();
        // register Spring @Autowired annotation handler with HK2 ServiceLocator
        ServiceLocatorUtilities.addOneConstant(locatornew AutowiredInjectResolver());
        ServiceLocatorUtilities.addOneConstant(locator"SpringContext"ApplicationContext.class);
        .config(LocalizationMessages.SPRING_COMPONENT_PROVIDER_INITIALIZED());
    }
    // detect JAX-RS classes that are also Spring @Components.
    // register these with HK2 ServiceLocator to manage their lifecycle using Spring.
    @Override
    public boolean bind(Class<?> componentSet<Class<?>> providerContracts) {
        if ( == null) {
            return false;
        }
        if(component.isAnnotationPresent(Component.class)) {
            DynamicConfiguration c = Injections.getConfiguration();
            String[] beanNames = .getBeanNamesForType(component);
            if(beanNames == null || beanNames.length != 1) {
                .severe(LocalizationMessages.NONE_OR_MULTIPLE_BEANS_AVAILABLE(component));
                return false;
            }
            String beanName = beanNames[0];
            ServiceBindingBuilder bb = Injections.newFactoryBinder(new SpringComponentProvider.SpringManagedBeanFactory(beanName));
            bb.to(component);
            Injections.addBinding(bbc);
            c.commit();
            .config(LocalizationMessages.BEAN_REGISTERED(beanName));
            return true;
        }
        return false;
    }
    @Override
    public void done() {
    }
        ApplicationHandler applicationHandler = .getService(ApplicationHandler.class);
        ApplicationContext springContext = (ApplicationContextapplicationHandler.getConfiguration().getProperty();
        if (springContext == null) {
            String contextConfigLocation = (StringapplicationHandler.getConfiguration().getProperty();
            springContext = createXmlSpringConfiguration(contextConfigLocation);
        }
        return springContext;
    }
    private ApplicationContext createXmlSpringConfiguration(String contextConfigLocation) {
        if (contextConfigLocation == null) {
            contextConfigLocation = ;
        }
        return  = new ClassPathXmlApplicationContext(contextConfigLocation"jersey-spring-applicationContext.xml");
    }
    private static class SpringManagedBeanFactory implements Factory {
        private final ApplicationContext ctx;
        private final ServiceLocator locator;
        private final String beanName;
        private SpringManagedBeanFactory(ApplicationContext ctxServiceLocator locatorString beanName) {
            this. = ctx;
            this. = locator;
            this. = beanName;
        }
        @Override
        public Object provide() {
            Object bean = .getBean();
            .inject(bean);
            return bean;
        }
        @Override
        public void dispose(Object instance) {
        }
    }
New to GrepCode? Check out our FAQ X