Recently when I was going through the RESTEasy documentation to find out the proper way to integrate it with Spring. There are several ways to do it. This is the first post in this series which will cover the ways to integrate RESTEasy with Spring.
We will start with the one which is mentioned in the RESTEasy documentation. We will be using Maven for dependency management in our project. First of all, add the RESTEasy dependency in your project,
Above code will add resteasy dependencies in your project. Next step is to define RESTEasy configuration in your web.xml.
We will start with the one which is mentioned in the RESTEasy documentation. We will be using Maven for dependency management in our project. First of all, add the RESTEasy dependency in your project,
org.jboss.resteasy resteasy-spring whatever version you are using
Archetype Created Web Application org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap org.jboss.resteasy.plugins.spring.SpringContextLoaderListener Resteasy org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
RESTEasy repository is initialized by ResteasyBootstrap class. So the sequence must be in the order which is specified above.
There is a problem (Bug#1012) with Spring 4 and RESTEasy (3.0.6 version) integration. SpringContextLoaderListener of RESTEasy has overridden createContextLoader method from ContextLoaderListener class of Spring which was deprecated in Spring 3.0 and has been removed in Spring 4.
To fix this issue, we need to provide our own implementation of Spring ContextLoaderListener which will register RESTEasy's SpringBeanProcessor and integration will work.
public class PatchedSpringContextLoaderListener extends ContextLoaderListener { private SpringContextLoaderSupport springContextLoaderSupport = new SpringContextLoaderSupport(); @Override public void contextInitialized(ServletContextEvent event) { System.out.println("Initializing context"); boolean scanProviders = false; boolean scanResources = false; String sProviders = event.getServletContext().getInitParameter( "resteasy.scan.providers"); if (sProviders != null) { scanProviders = Boolean.valueOf(sProviders.trim()); } String scanAll = event.getServletContext().getInitParameter( "resteasy.scan"); if (scanAll != null) { boolean tmp = Boolean.valueOf(scanAll.trim()); scanProviders = tmp || scanProviders; scanResources = tmp || scanResources; } String sResources = event.getServletContext().getInitParameter( "resteasy.scan.resources"); if (sResources != null) { scanResources = Boolean.valueOf(sResources.trim()); } if (scanProviders || scanResources) { throw new RuntimeException( "You cannot use resteasy.scan, resteasy.scan.resources, or resteasy.scan.providers with the SpringContextLoaderLister as this may cause serious deployment errors in your application"); } super.contextInitialized(event); } @Override protected void customizeContext(ServletContext servletContext, ConfigurableWebApplicationContext configurableWebApplicationContext) { System.out.println("Customizing context"); super.customizeContext(servletContext, configurableWebApplicationContext); this.springContextLoaderSupport.customizeContext(servletContext, configurableWebApplicationContext); } }
Comments
Post a Comment