Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
   * 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
  * 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.

Marko Asplund (marko.asplund at
 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;
     public void initialize(ServiceLocator locator) {
         this. = locator;
         if (.isLoggable(.)) {
         ServletContext sc = locator.getService(ServletContext.class);
         if(sc != null) {
             // servlet container
              = WebApplicationContextUtils.getWebApplicationContext(sc);
         } else {
             // non-servlet container
              = createSpringContext();
         if( == null) {
        // initialize HK2 spring-bridge
        SpringIntoHK2Bridge springBridge = locator.getService(SpringIntoHK2Bridge.class);
        // register Spring @Autowired annotation handler with HK2 ServiceLocator
        ServiceLocatorUtilities.addOneConstant(locatornew AutowiredInjectResolver());
    // detect JAX-RS classes that are also Spring @Components.
    // register these with HK2 ServiceLocator to manage their lifecycle using Spring.
    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) {
                return false;
            String beanName = beanNames[0];
            ServiceBindingBuilder bb = Injections.newFactoryBinder(new SpringComponentProvider.SpringManagedBeanFactory(beanName));
            return true;
        return false;
    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;
        public Object provide() {
            Object bean = .getBean();
            return bean;
        public void dispose(Object instance) {
New to GrepCode? Check out our FAQ X