18/03/2012

Spring + JUnit + RestTemplate + Jetty + Jersey

After a whole day spent struggling, finally I managed to make it work. Now I can easily test my rest services.


@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
public class UserResourceTest {
 
 @Autowired RestTemplate restTemplate;

 @BeforeClass
 static public void setUp() throws Exception {
  Server server = new Server(8080);
  ServletContextHandler resource = new ServletContextHandler(ServletContextHandler.SESSIONS);

  resource.setContextPath("/");

  resource.getInitParams().put("contextConfigLocation", "classpath:applicationContext.xml");

  ServletHolder servletDef = new ServletHolder(SpringServlet.class);
  servletDef.setInitParameter("com.sun.jersey.config.property.packages","org.codehaus.jackson.jaxrs");
  resource.addServlet(servletDef, "/*");

  resource.addEventListener(new ContextLoaderListener());
  resource.addEventListener(new RequestContextListener());

  server.setHandler(resource);
  server.setStopAtShutdown(true);
  server.start();    
 }

 @Test
 public void test_rest_crud() throws Exception {
  Object users = restTemplate.getForObject("http://localhost:8080/users", Object.class);
  Assert.assertNotNull(users); 
 }

}