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

cd.connect.spring.jersey.JerseyApplicationBase Maven / Gradle / Ivy

package cd.connect.spring.jersey;


import cd.connect.spring.jersey.log.JerseyFiltering;
import com.bluetrainsoftware.prometheus.PrometheusFilter;
import com.fasterxml.jackson.jaxrs.json.annotation.JSONP;
import io.swagger.jaxrs.listing.ApiListingResource;
import io.swagger.jaxrs.listing.SwaggerSerializers;
import org.glassfish.jersey.CommonProperties;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
import org.glassfish.jersey.message.GZipEncoder;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.spring.scope.RequestContextFilter;
import org.glassfish.jersey.server.wadl.internal.WadlResource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;

import javax.ws.rs.core.Configurable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;

import static org.glassfish.jersey.servlet.ServletProperties.PROVIDER_WEB_APP;

/**
 * You could do this monkeying around with creating lots of different spring beans and then registering your resources
 * later, but they would have to do essentially what this one does.
 *
 * @author Richard Vowles - https://plus.google.com/+RichardVowles
 */
public class JerseyApplicationBase extends ResourceConfig implements JerseyApplication {
	private static final Logger logger = LoggerFactory.getLogger(JerseyApplicationBase.class);

	public void init(ApplicationContext context, Stream> resources) {
		// attempt to pull the distributed configuration for all contexts into this context
		List configItems = new ArrayList<>();

		try {
			Map configs = context.getBeansOfType(JaxrsServerConfigurer.class);
			configItems.addAll(configs.values());
		} catch (Exception ex) {
		}

		if (configItems.size() == 0) {
			addLogging(configItems, context);
			configItems.add(new DefaultServerConfigurer());
		}

		configItems.forEach(c -> c.configure(this));

		// now register services specific to this particular Jersey Application.
		if (resources != null) {
			Set> resourceClasses = new HashSet<>();

			resources.forEach(c -> {
				logger.debug("registering jersey resource: {}", c.getName());
				register(context.getBean(c));
				resourceClasses.add(c);
			});

			property(JerseyApplication.RESOURCE_INTERFACE_LIST, resourceClasses);
		}
	}

	private void addLogging(List configItems, ApplicationContext context) {
		try {
			JerseyFiltering bean = context.getBean(JerseyFiltering.class);

			if (bean != null) {
				configItems.add(new FilteringServerConfigurer(bean));
			}
		} catch (Exception ex) {
			logger.warn("Unable register logging or path exclusion - perhaps you didn't include `{}` class?", JerseyConfig.class.getName());
		}
	}

	private void registerLogging(ApplicationContext context) {
	}

	/*
	 * override this if you wish to register further stuff
	 */
	protected void enhance(ApplicationContext context, Stream> resources) {
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy